This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new 6964d9f99c [fix](function) resubmit-fix AES/SM3/SM4 encrypt/ decrypt algorithm initialization vector bug (#17907) 6964d9f99c is described below commit 6964d9f99c1a077ad0c509a9a303edf24a4a322d Author: Xinyi Zou <zouxiny...@gmail.com> AuthorDate: Wed Mar 29 21:13:01 2023 +0800 [fix](function) resubmit-fix AES/SM3/SM4 encrypt/ decrypt algorithm initialization vector bug (#17907) * Revert "[fix](function) fix AES/SM3/SM4 encrypt/ decrypt algorithm initialization vector bug (#17420)" This reverts commit 397cc011c4f1ba5a25c770258c13f1cd3f28b47d. * [fix-resubmit](function) fix AES/SM3/SM4 encrypt/ decrypt algorithm initialization vector bug (#17420) ECB algorithm, block_encryption_mode does not take effect, it only takes effect when init vector is provided. Solved: 192/256 supports calculation without init vector For other algorithms, an error should be reported when there is no init vector Initialization Vector. The default value for the block_encryption_mode system variable is aes-128-ecb, or ECB mode, which does not require an initialization vector. The alternative permitted block encryption modes CBC, CFB1, CFB8, CFB128, and OFB all require an initialization vector. Reference: https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html#function_aes-decrypt Note: This fix does not support smooth upgrades. during upgrade process, query may report error: funciton not found --- be/src/vec/functions/function_encryption.cpp | 14 +- be/test/vec/function/function_string_test.cpp | 97 +++++---- .../sql-functions/encrypt-digest-functions/aes.md | 8 +- .../sql-functions/encrypt-digest-functions/aes.md | 8 +- .../apache/doris/analysis/FunctionCallExpr.java | 79 ++++++- .../doris/catalog/BuiltinScalarFunctions.java | 8 + .../expressions/functions/FunctionBuilder.java | 2 +- .../expressions/functions/scalar/AesDecrypt.java | 9 +- .../expressions/functions/scalar/AesDecryptV2.java | 74 +++++++ .../expressions/functions/scalar/AesEncrypt.java | 9 +- .../expressions/functions/scalar/AesEncryptV2.java | 74 +++++++ .../expressions/functions/scalar/Sm4Decrypt.java | 6 +- .../expressions/functions/scalar/Sm4DecryptV2.java | 69 ++++++ .../expressions/functions/scalar/Sm4Encrypt.java | 6 +- .../expressions/functions/scalar/Sm4EncryptV2.java | 72 +++++++ .../expressions/visitor/ScalarFunctionVisitor.java | 20 ++ gensrc/script/doris_builtins_functions.py | 16 +- .../data/nereids_function_p0/scalar_function/S.out | 232 --------------------- .../encryption_digest/test_encryption_function.out | 77 +++++-- .../encryption_digest/test_encryption_function.out | 83 +++++++- .../nereids_function_p0/scalar_function/S.groovy | 48 +++++ .../test_encryption_function.groovy | 124 ++++++++--- .../test_encryption_function.groovy | 115 +++++++--- 23 files changed, 857 insertions(+), 393 deletions(-) diff --git a/be/src/vec/functions/function_encryption.cpp b/be/src/vec/functions/function_encryption.cpp index 50b46ed0a0..e0d9edfce1 100644 --- a/be/src/vec/functions/function_encryption.cpp +++ b/be/src/vec/functions/function_encryption.cpp @@ -154,7 +154,8 @@ void exectue_result(std::vector<const ColumnString::Offsets*>& offsets_list, template <typename Impl, EncryptionMode mode, bool is_encrypt> struct EncryptionAndDecryptTwoImpl { static DataTypes get_variadic_argument_types_impl() { - return {std::make_shared<DataTypeString>(), std::make_shared<DataTypeString>()}; + return {std::make_shared<DataTypeString>(), std::make_shared<DataTypeString>(), + std::make_shared<DataTypeString>()}; } static Status vector_vector(std::vector<const ColumnString::Offsets*>& offsets_list, @@ -167,6 +168,17 @@ struct EncryptionAndDecryptTwoImpl { continue; } EncryptionMode encryption_mode = mode; + int mode_size = (*offsets_list[2])[i] - (*offsets_list[2])[i - 1]; + const auto mode_raw = + reinterpret_cast<const char*>(&(*chars_list[2])[(*offsets_list[2])[i - 1]]); + if (mode_size != 0) { + std::string mode_str(mode_raw, mode_size); + if (aes_mode_map.count(mode_str) == 0) { + StringOP::push_null_string(i, result_data, result_offset, null_map); + continue; + } + encryption_mode = aes_mode_map.at(mode_str); + } exectue_result<Impl, is_encrypt>(offsets_list, chars_list, i, encryption_mode, nullptr, 0, result_data, result_offset, null_map); } diff --git a/be/test/vec/function/function_string_test.cpp b/be/test/vec/function/function_string_test.cpp index 42d759df79..7816852913 100644 --- a/be/test/vec/function/function_string_test.cpp +++ b/be/test/vec/function/function_string_test.cpp @@ -676,8 +676,9 @@ TEST(function_string_test, function_sm3sum_test) { TEST(function_string_test, function_aes_encrypt_test) { std::string func_name = "aes_encrypt"; { - InputTypeSet input_types = {TypeIndex::String, TypeIndex::String}; + InputTypeSet input_types = {TypeIndex::String, TypeIndex::String, TypeIndex::String}; + const char* mode = "AES_128_ECB"; const char* key = "doris"; const char* src[6] = {"aaaaaa", "bbbbbb", "cccccc", "dddddd", "eeeeee", ""}; std::string r[5]; @@ -692,13 +693,13 @@ TEST(function_string_test, function_aes_encrypt_test) { r[i] = std::string(p, outlen); } - DataSet data_set = {{{std::string(src[0]), std::string(key)}, r[0]}, - {{std::string(src[1]), std::string(key)}, r[1]}, - {{std::string(src[2]), std::string(key)}, r[2]}, - {{std::string(src[3]), std::string(key)}, r[3]}, - {{std::string(src[4]), std::string(key)}, r[4]}, - {{std::string(src[5]), std::string(key)}, Null()}, - {{Null(), std::string(key)}, Null()}}; + DataSet data_set = {{{std::string(src[0]), std::string(key), std::string(mode)}, r[0]}, + {{std::string(src[1]), std::string(key), std::string(mode)}, r[1]}, + {{std::string(src[2]), std::string(key), std::string(mode)}, r[2]}, + {{std::string(src[3]), std::string(key), std::string(mode)}, r[3]}, + {{std::string(src[4]), std::string(key), std::string(mode)}, r[4]}, + {{std::string(src[5]), std::string(key), std::string(mode)}, Null()}, + {{Null(), std::string(key), std::string(mode)}, Null()}}; check_function<DataTypeString, true>(func_name, input_types, data_set); } @@ -743,8 +744,9 @@ TEST(function_string_test, function_aes_encrypt_test) { TEST(function_string_test, function_aes_decrypt_test) { std::string func_name = "aes_decrypt"; { - InputTypeSet input_types = {TypeIndex::String, TypeIndex::String}; + InputTypeSet input_types = {TypeIndex::String, TypeIndex::String, TypeIndex::String}; + const char* mode = "AES_128_ECB"; const char* key = "doris"; const char* src[5] = {"aaaaaa", "bbbbbb", "cccccc", "dddddd", "eeeeee"}; std::string r[5]; @@ -759,12 +761,12 @@ TEST(function_string_test, function_aes_decrypt_test) { r[i] = std::string(p, outlen); } - DataSet data_set = {{{r[0], std::string(key)}, std::string(src[0])}, - {{r[1], std::string(key)}, std::string(src[1])}, - {{r[2], std::string(key)}, std::string(src[2])}, - {{r[3], std::string(key)}, std::string(src[3])}, - {{r[4], std::string(key)}, std::string(src[4])}, - {{Null(), std::string(key)}, Null()}}; + DataSet data_set = {{{r[0], std::string(key), std::string(mode)}, std::string(src[0])}, + {{r[1], std::string(key), std::string(mode)}, std::string(src[1])}, + {{r[2], std::string(key), std::string(mode)}, std::string(src[2])}, + {{r[3], std::string(key), std::string(mode)}, std::string(src[3])}, + {{r[4], std::string(key), std::string(mode)}, std::string(src[4])}, + {{Null(), std::string(key), std::string(mode)}, Null()}}; check_function<DataTypeString, true>(func_name, input_types, data_set); } @@ -806,29 +808,39 @@ TEST(function_string_test, function_aes_decrypt_test) { TEST(function_string_test, function_sm4_encrypt_test) { std::string func_name = "sm4_encrypt"; { - InputTypeSet input_types = {TypeIndex::String, TypeIndex::String}; + InputTypeSet input_types = {TypeIndex::String, TypeIndex::String, TypeIndex::String, + TypeIndex::String}; const char* key = "doris"; + const char* iv = "0123456789abcdef"; + const char* mode = "SM4_128_ECB"; const char* src[6] = {"aaaaaa", "bbbbbb", "cccccc", "dddddd", "eeeeee", ""}; std::string r[5]; for (int i = 0; i < 5; i++) { int cipher_len = strlen(src[i]) + 16; char p[cipher_len]; - - int outlen = EncryptionUtil::encrypt( - EncryptionMode::SM4_128_ECB, (unsigned char*)src[i], strlen(src[i]), - (unsigned char*)key, strlen(key), nullptr, 0, true, (unsigned char*)p); + int iv_len = 32; + std::unique_ptr<char[]> init_vec; + init_vec.reset(new char[iv_len]); + std::memset(init_vec.get(), 0, strlen(iv) + 1); + memcpy(init_vec.get(), iv, strlen(iv)); + int outlen = + EncryptionUtil::encrypt(EncryptionMode::SM4_128_ECB, (unsigned char*)src[i], + strlen(src[i]), (unsigned char*)key, strlen(key), + init_vec.get(), strlen(iv), true, (unsigned char*)p); r[i] = std::string(p, outlen); } - DataSet data_set = {{{std::string(src[0]), std::string(key)}, r[0]}, - {{std::string(src[1]), std::string(key)}, r[1]}, - {{std::string(src[2]), std::string(key)}, r[2]}, - {{std::string(src[3]), std::string(key)}, r[3]}, - {{std::string(src[4]), std::string(key)}, r[4]}, - {{std::string(src[5]), std::string(key)}, Null()}, - {{Null(), std::string(key)}, Null()}}; + DataSet data_set = { + {{std::string(src[0]), std::string(key), std::string(iv), std::string(mode)}, r[0]}, + {{std::string(src[1]), std::string(key), std::string(iv), std::string(mode)}, r[1]}, + {{std::string(src[2]), std::string(key), std::string(iv), std::string(mode)}, r[2]}, + {{std::string(src[3]), std::string(key), std::string(iv), std::string(mode)}, r[3]}, + {{std::string(src[4]), std::string(key), std::string(iv), std::string(mode)}, r[4]}, + {{std::string(src[5]), std::string(key), std::string(iv), std::string(mode)}, + Null()}, + {{Null(), std::string(key), std::string(iv), std::string(mode)}, Null()}}; check_function<DataTypeString, true>(func_name, input_types, data_set); } @@ -875,28 +887,37 @@ TEST(function_string_test, function_sm4_encrypt_test) { TEST(function_string_test, function_sm4_decrypt_test) { std::string func_name = "sm4_decrypt"; { - InputTypeSet input_types = {TypeIndex::String, TypeIndex::String}; + InputTypeSet input_types = {TypeIndex::String, TypeIndex::String, TypeIndex::String, + TypeIndex::String}; const char* key = "doris"; + const char* iv = "0123456789abcdef"; + const char* mode = "SM4_128_ECB"; const char* src[5] = {"aaaaaa", "bbbbbb", "cccccc", "dddddd", "eeeeee"}; std::string r[5]; for (int i = 0; i < 5; i++) { int cipher_len = strlen(src[i]) + 16; char p[cipher_len]; - - int outlen = EncryptionUtil::encrypt( - EncryptionMode::SM4_128_ECB, (unsigned char*)src[i], strlen(src[i]), - (unsigned char*)key, strlen(key), nullptr, 0, true, (unsigned char*)p); + int iv_len = 32; + std::unique_ptr<char[]> init_vec; + init_vec.reset(new char[iv_len]); + std::memset(init_vec.get(), 0, strlen(iv) + 1); + memcpy(init_vec.get(), iv, strlen(iv)); + int outlen = + EncryptionUtil::encrypt(EncryptionMode::SM4_128_ECB, (unsigned char*)src[i], + strlen(src[i]), (unsigned char*)key, strlen(key), + init_vec.get(), strlen(iv), true, (unsigned char*)p); r[i] = std::string(p, outlen); } - DataSet data_set = {{{r[0], std::string(key)}, std::string(src[0])}, - {{r[1], std::string(key)}, std::string(src[1])}, - {{r[2], std::string(key)}, std::string(src[2])}, - {{r[3], std::string(key)}, std::string(src[3])}, - {{r[4], std::string(key)}, std::string(src[4])}, - {{Null(), std::string(key)}, Null()}}; + DataSet data_set = { + {{r[0], std::string(key), std::string(iv), std::string(mode)}, std::string(src[0])}, + {{r[1], std::string(key), std::string(iv), std::string(mode)}, std::string(src[1])}, + {{r[2], std::string(key), std::string(iv), std::string(mode)}, std::string(src[2])}, + {{r[3], std::string(key), std::string(iv), std::string(mode)}, std::string(src[3])}, + {{r[4], std::string(key), std::string(iv), std::string(mode)}, std::string(src[4])}, + {{Null(), std::string(key), std::string(iv), std::string(mode)}, Null()}}; check_function<DataTypeString, true>(func_name, input_types, data_set); } diff --git a/docs/en/docs/sql-manual/sql-functions/encrypt-digest-functions/aes.md b/docs/en/docs/sql-manual/sql-functions/encrypt-digest-functions/aes.md index 26e079bd7d..58a73084b5 100644 --- a/docs/en/docs/sql-manual/sql-functions/encrypt-digest-functions/aes.md +++ b/docs/en/docs/sql-manual/sql-functions/encrypt-digest-functions/aes.md @@ -31,6 +31,12 @@ AES_ENCRYPT ### description Encryption of data using the OpenSSL. This function is consistent with the `AES_ENCRYPT` function in MySQL. Using AES_128_ECB algorithm by default, and the padding mode is PKCS7. +Reference: https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html#function_aes-decrypt + +### Compatibility + +1. aes_decrypt/aes_encrypt/sm4_decrypt/sm4_encrypt When the initial vector is not provided, block_encryption_mode will not take effect, and AES_128_ECB will be used for encryption and decryption in the end, which is inconsistent with the behavior of MySQL. +2. Add aes_decrypt_v2/aes_encrypt_v2/sm4_decrypt_v2/sm4_encrypt_v2 functions to support correct behavior. When no initial vector is provided, block_encryption_mode can take effect, aes-192-ecb and aes-256-ecb will be correctly encrypted and decrypted, and other block encryption modes will report an error. If there is no need to be compatible with old data, the v2 function can be used directly. #### Syntax @@ -42,7 +48,7 @@ AES_ENCRYPT(str,key_str[,init_vector]) - `str`: Content to be encrypted - `key_str`: Secret key -- `init_vector`: Initialization Vector +- `init_vector`: Initialization Vector. The default value for the block_encryption_mode system variable is aes ecb mode, which does not require an initialization vector. The alternative permitted block encryption modes CBC, CFB1, CFB8, CFB128, and OFB all require an initialization vector. #### Return Type diff --git a/docs/zh-CN/docs/sql-manual/sql-functions/encrypt-digest-functions/aes.md b/docs/zh-CN/docs/sql-manual/sql-functions/encrypt-digest-functions/aes.md index c8643430a6..057173a9a3 100644 --- a/docs/zh-CN/docs/sql-manual/sql-functions/encrypt-digest-functions/aes.md +++ b/docs/zh-CN/docs/sql-manual/sql-functions/encrypt-digest-functions/aes.md @@ -31,6 +31,12 @@ AES_ENCRYPT ### Description Aes 加密函数。该函数与 MySQL 中的 `AES_ENCRYPT` 函数行为一致。默认采用 AES_128_ECB 算法,padding 模式为 PKCS7。底层使用 OpenSSL 库进行加密。 +Reference: https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html#function_aes-decrypt + +### Compatibility + +1. aes_decrypt/aes_encrypt/sm4_decrypt/sm4_encrypt 当没有提供初始向量时,block_encryption_mode 不生效,最终都会使用 AES_128_ECB 加解密,这和 MySQL 的行为不一致。 +2. 增加 aes_decrypt_v2/aes_encrypt_v2/sm4_decrypt_v2/sm4_encrypt_v2 函数支持正确的行为,没有提供初始向量时,block_encryption_mode 可以生效,aes-192-ecb 和 aes-256-ecb 将正确加解密,其他块加密模式将报错。如果无需兼容旧数据,可直接使用v2函数。 #### Syntax @@ -42,7 +48,7 @@ AES_ENCRYPT(str,key_str[,init_vector]) - `str`: 待加密的内容 - `key_str`: 密钥 -- `init_vector`: 初始向量 +- `init_vector`: 初始向量。block_encryption_mode 默认值为 aes-128-ecb,它不需要初始向量,可选的块加密模式 CBC、CFB1、CFB8、CFB128 和 OFB 都需要一个初始向量。 #### Return Type diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java index 23603363bb..c273ea3bc2 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java @@ -514,7 +514,11 @@ public class FunctionCallExpr extends Expr { && (fnName.getFunction().equalsIgnoreCase("aes_decrypt") || fnName.getFunction().equalsIgnoreCase("aes_encrypt") || fnName.getFunction().equalsIgnoreCase("sm4_decrypt") - || fnName.getFunction().equalsIgnoreCase("sm4_encrypt"))) { + || fnName.getFunction().equalsIgnoreCase("sm4_encrypt") + || fnName.getFunction().equalsIgnoreCase("aes_decrypt_v2") + || fnName.getFunction().equalsIgnoreCase("aes_encrypt_v2") + || fnName.getFunction().equalsIgnoreCase("sm4_decrypt_v2") + || fnName.getFunction().equalsIgnoreCase("sm4_encrypt_v2"))) { result.add("\'***\'"); } else if (orderByElements.size() > 0 && i == len - orderByElements.size()) { result.add("ORDER BY " + children.get(i).toSql()); @@ -564,14 +568,22 @@ public class FunctionCallExpr extends Expr { if (fnName.getFunction().equalsIgnoreCase("aes_decrypt") || fnName.getFunction().equalsIgnoreCase("aes_encrypt") || fnName.getFunction().equalsIgnoreCase("sm4_decrypt") - || fnName.getFunction().equalsIgnoreCase("sm4_encrypt")) { + || fnName.getFunction().equalsIgnoreCase("sm4_encrypt") + || fnName.getFunction().equalsIgnoreCase("aes_decrypt_v2") + || fnName.getFunction().equalsIgnoreCase("aes_encrypt_v2") + || fnName.getFunction().equalsIgnoreCase("sm4_decrypt_v2") + || fnName.getFunction().equalsIgnoreCase("sm4_encrypt_v2")) { len = len - 1; } for (int i = 0; i < len; ++i) { if (i == 1 && (fnName.getFunction().equalsIgnoreCase("aes_decrypt") || fnName.getFunction().equalsIgnoreCase("aes_encrypt") || fnName.getFunction().equalsIgnoreCase("sm4_decrypt") - || fnName.getFunction().equalsIgnoreCase("sm4_encrypt"))) { + || fnName.getFunction().equalsIgnoreCase("sm4_encrypt") + || fnName.getFunction().equalsIgnoreCase("aes_decrypt_v2") + || fnName.getFunction().equalsIgnoreCase("aes_encrypt_v2") + || fnName.getFunction().equalsIgnoreCase("sm4_decrypt_v2") + || fnName.getFunction().equalsIgnoreCase("sm4_encrypt_v2"))) { result.add("\'***\'"); } else { result.add(children.get(i).toDigest()); @@ -953,8 +965,12 @@ public class FunctionCallExpr extends Expr { if ((fnName.getFunction().equalsIgnoreCase("aes_decrypt") || fnName.getFunction().equalsIgnoreCase("aes_encrypt") || fnName.getFunction().equalsIgnoreCase("sm4_decrypt") - || fnName.getFunction().equalsIgnoreCase("sm4_encrypt")) - && children.size() == 3) { + || fnName.getFunction().equalsIgnoreCase("sm4_encrypt") + || fnName.getFunction().equalsIgnoreCase("aes_decrypt_v2") + || fnName.getFunction().equalsIgnoreCase("aes_encrypt_v2") + || fnName.getFunction().equalsIgnoreCase("sm4_decrypt_v2") + || fnName.getFunction().equalsIgnoreCase("sm4_encrypt_v2")) + && (children.size() == 2 || children.size() == 3)) { String blockEncryptionMode = ""; Set<String> aesModes = new HashSet<>(Arrays.asList( "AES_128_ECB", @@ -992,7 +1008,9 @@ public class FunctionCallExpr extends Expr { if (ConnectContext.get() != null) { blockEncryptionMode = ConnectContext.get().getSessionVariable().getBlockEncryptionMode(); if (fnName.getFunction().equalsIgnoreCase("aes_decrypt") - || fnName.getFunction().equalsIgnoreCase("aes_encrypt")) { + || fnName.getFunction().equalsIgnoreCase("aes_encrypt") + || fnName.getFunction().equalsIgnoreCase("aes_decrypt_v2") + || fnName.getFunction().equalsIgnoreCase("aes_encrypt_v2")) { if (StringUtils.isAllBlank(blockEncryptionMode)) { blockEncryptionMode = "AES_128_ECB"; } @@ -1000,23 +1018,66 @@ public class FunctionCallExpr extends Expr { throw new AnalysisException("session variable block_encryption_mode is invalid with aes"); } + if (children.size() == 2) { + if (!blockEncryptionMode.toUpperCase().equals("AES_128_ECB") + && !blockEncryptionMode.toUpperCase().equals("AES_192_ECB") + && !blockEncryptionMode.toUpperCase().equals("AES_256_ECB")) { + if (fnName.getFunction().equalsIgnoreCase("aes_decrypt_v2")) { + throw new AnalysisException( + "Incorrect parameter count in the call to native function 'aes_decrypt'"); + } else if (fnName.getFunction().equalsIgnoreCase("aes_encrypt_v2")) { + throw new AnalysisException( + "Incorrect parameter count in the call to native function 'aes_encrypt'"); + } else { + blockEncryptionMode = "AES_128_ECB"; + } + } else if ((blockEncryptionMode.toUpperCase().equals("AES_192_ECB") + || blockEncryptionMode.toUpperCase().equals("AES_256_ECB")) + && !fnName.getFunction().equalsIgnoreCase("aes_decrypt_v2") + && !fnName.getFunction().equalsIgnoreCase("aes_encrypt_v2")) { + blockEncryptionMode = "AES_128_ECB"; + } + } } if (fnName.getFunction().equalsIgnoreCase("sm4_decrypt") - || fnName.getFunction().equalsIgnoreCase("sm4_encrypt")) { + || fnName.getFunction().equalsIgnoreCase("sm4_encrypt") + || fnName.getFunction().equalsIgnoreCase("sm4_decrypt_v2") + || fnName.getFunction().equalsIgnoreCase("sm4_encrypt_v2")) { if (StringUtils.isAllBlank(blockEncryptionMode)) { blockEncryptionMode = "SM4_128_ECB"; } if (!sm4Modes.contains(blockEncryptionMode.toUpperCase())) { - throw new AnalysisException("session variable block_encryption_mode is invalid with sm4"); + throw new AnalysisException( + "session variable block_encryption_mode is invalid with sm4"); } + if (children.size() == 2) { + if (fnName.getFunction().equalsIgnoreCase("sm4_decrypt_v2")) { + throw new AnalysisException( + "Incorrect parameter count in the call to native function 'sm4_decrypt'"); + } else if (fnName.getFunction().equalsIgnoreCase("sm4_encrypt_v2")) { + throw new AnalysisException( + "Incorrect parameter count in the call to native function 'sm4_encrypt'"); + } else { + blockEncryptionMode = "AES_128_ECB"; + } + } } } if (!blockEncryptionMode.equals(children.get(children.size() - 1).toString())) { children.add(new StringLiteral(blockEncryptionMode)); } - } + if (fnName.getFunction().equalsIgnoreCase("aes_decrypt_v2")) { + fnName = FunctionName.createBuiltinName("aes_decrypt"); + } else if (fnName.getFunction().equalsIgnoreCase("aes_encrypt_v2")) { + fnName = FunctionName.createBuiltinName("aes_encrypt"); + } else if (fnName.getFunction().equalsIgnoreCase("sm4_decrypt_v2")) { + fnName = FunctionName.createBuiltinName("sm4_decrypt"); + } else if (fnName.getFunction().equalsIgnoreCase("sm4_encrypt_v2")) { + fnName = FunctionName.createBuiltinName("sm4_encrypt"); + } + } } private void analyzeArrayFunction(Analyzer analyzer) throws AnalysisException { diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java index 89ff2fac04..e72a730aae 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java @@ -20,7 +20,9 @@ package org.apache.doris.catalog; import org.apache.doris.nereids.trees.expressions.functions.scalar.Abs; import org.apache.doris.nereids.trees.expressions.functions.scalar.Acos; import org.apache.doris.nereids.trees.expressions.functions.scalar.AesDecrypt; +import org.apache.doris.nereids.trees.expressions.functions.scalar.AesDecryptV2; import org.apache.doris.nereids.trees.expressions.functions.scalar.AesEncrypt; +import org.apache.doris.nereids.trees.expressions.functions.scalar.AesEncryptV2; import org.apache.doris.nereids.trees.expressions.functions.scalar.AppendTrailingCharIfAbsent; import org.apache.doris.nereids.trees.expressions.functions.scalar.Array; import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayAvg; @@ -257,7 +259,9 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.Sleep; import org.apache.doris.nereids.trees.expressions.functions.scalar.Sm3; import org.apache.doris.nereids.trees.expressions.functions.scalar.Sm3sum; import org.apache.doris.nereids.trees.expressions.functions.scalar.Sm4Decrypt; +import org.apache.doris.nereids.trees.expressions.functions.scalar.Sm4DecryptV2; import org.apache.doris.nereids.trees.expressions.functions.scalar.Sm4Encrypt; +import org.apache.doris.nereids.trees.expressions.functions.scalar.Sm4EncryptV2; import org.apache.doris.nereids.trees.expressions.functions.scalar.Space; import org.apache.doris.nereids.trees.expressions.functions.scalar.SplitByChar; import org.apache.doris.nereids.trees.expressions.functions.scalar.SplitByString; @@ -341,7 +345,9 @@ public class BuiltinScalarFunctions implements FunctionHelper { scalar(Abs.class, "abs"), scalar(Acos.class, "acos"), scalar(AesDecrypt.class, "aes_decrypt"), + scalar(AesDecryptV2.class, "aes_decrypt_v2"), scalar(AesEncrypt.class, "aes_encrypt"), + scalar(AesEncryptV2.class, "aes_encrypt_v2"), scalar(AppendTrailingCharIfAbsent.class, "append_trailing_char_if_absent"), scalar(Array.class, "array"), scalar(ArrayAvg.class, "array_avg"), @@ -578,7 +584,9 @@ public class BuiltinScalarFunctions implements FunctionHelper { scalar(Sm3.class, "sm3"), scalar(Sm3sum.class, "sm3sum"), scalar(Sm4Decrypt.class, "sm4_decrypt"), + scalar(Sm4DecryptV2.class, "sm4_decrypt_v2"), scalar(Sm4Encrypt.class, "sm4_encrypt"), + scalar(Sm4EncryptV2.class, "sm4_encrypt_v2"), scalar(Space.class, "space"), scalar(SplitByChar.class, "split_by_char"), scalar(SplitByString.class, "split_by_string"), diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/FunctionBuilder.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/FunctionBuilder.java index d2ead858e1..037174119f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/FunctionBuilder.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/FunctionBuilder.java @@ -107,7 +107,7 @@ public class FunctionBuilder { }) .collect(Collectors.joining(", ", "(", ")")); throw new IllegalStateException("Can not build function: '" + name - + "', expression: " + name + argString, t); + + "', expression: " + name + argString + ", " + t.getCause().getMessage(), t); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/AesDecrypt.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/AesDecrypt.java index a3109ab3e2..da021bdc8a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/AesDecrypt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/AesDecrypt.java @@ -18,7 +18,6 @@ package org.apache.doris.nereids.trees.expressions.functions.scalar; import org.apache.doris.catalog.FunctionSignature; -import org.apache.doris.nereids.exceptions.AnalysisException; import org.apache.doris.nereids.trees.expressions.Expression; import org.apache.doris.nereids.trees.expressions.literal.StringLiteral; import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; @@ -54,8 +53,11 @@ public class AesDecrypt extends AesCryptoFunction { .args(StringType.INSTANCE, StringType.INSTANCE, StringType.INSTANCE, StringType.INSTANCE) ); + /** + * AesDecrypt + */ public AesDecrypt(Expression arg0, Expression arg1) { - super("aes_decrypt", arg0, arg1); + super("aes_decrypt", arg0, arg1, new StringLiteral("AES_128_ECB")); } public AesDecrypt(Expression arg0, Expression arg1, Expression arg2) { @@ -77,9 +79,6 @@ public class AesDecrypt extends AesCryptoFunction { } else if (children().size() == 3) { return new AesDecrypt(children.get(0), children.get(1), children.get(2)); } else { - if (!(children.get(3) instanceof StringLiteral)) { - throw new AnalysisException("the 4th parameter should be string literal: " + this.toSql()); - } return new AesDecrypt(children.get(0), children.get(1), children.get(2), (StringLiteral) children.get(3)); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/AesDecryptV2.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/AesDecryptV2.java new file mode 100644 index 0000000000..3a5a8121cf --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/AesDecryptV2.java @@ -0,0 +1,74 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package org.apache.doris.nereids.trees.expressions.functions.scalar; + +import org.apache.doris.nereids.exceptions.AnalysisException; +import org.apache.doris.nereids.trees.expressions.Expression; +import org.apache.doris.nereids.trees.expressions.literal.StringLiteral; +import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; + +import com.google.common.base.Preconditions; + +import java.util.List; + +/** + * ScalarFunction 'aes_decrypt'. This class is generated by GenerateFunction. + */ +public class AesDecryptV2 extends AesDecrypt { + + /** + * AesDecryptV2 + */ + public AesDecryptV2(Expression arg0, Expression arg1) { + super(arg0, arg1, getDefaultBlockEncryptionMode()); + String blockEncryptionMode = String.valueOf(getDefaultBlockEncryptionMode()); + if (!blockEncryptionMode.toUpperCase().equals("'AES_128_ECB'") + && !blockEncryptionMode.toUpperCase().equals("'AES_192_ECB'") + && !blockEncryptionMode.toUpperCase().equals("'AES_256_ECB'")) { + throw new AnalysisException("Incorrect parameter count in the call to native function 'aes_decrypt'"); + } + } + + public AesDecryptV2(Expression arg0, Expression arg1, Expression arg2) { + super(arg0, arg1, arg2); + } + + public AesDecryptV2(Expression arg0, Expression arg1, Expression arg2, Expression arg3) { + super(arg0, arg1, arg2, arg3); + } + + /** + * withChildren. + */ + @Override + public AesDecryptV2 withChildren(List<Expression> children) { + Preconditions.checkArgument(children.size() >= 2 && children.size() <= 4); + if (children.size() == 2) { + return new AesDecryptV2(children.get(0), children.get(1)); + } else if (children().size() == 3) { + return new AesDecryptV2(children.get(0), children.get(1), children.get(2)); + } else { + return new AesDecryptV2(children.get(0), children.get(1), children.get(2), (StringLiteral) children.get(3)); + } + } + + @Override + public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) { + return visitor.visitAesDecryptV2(this, context); + } +} diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/AesEncrypt.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/AesEncrypt.java index 1a0ef5b401..c9652ae9f0 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/AesEncrypt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/AesEncrypt.java @@ -18,7 +18,6 @@ package org.apache.doris.nereids.trees.expressions.functions.scalar; import org.apache.doris.catalog.FunctionSignature; -import org.apache.doris.nereids.exceptions.AnalysisException; import org.apache.doris.nereids.trees.expressions.Expression; import org.apache.doris.nereids.trees.expressions.literal.StringLiteral; import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; @@ -54,8 +53,11 @@ public class AesEncrypt extends AesCryptoFunction { .args(StringType.INSTANCE, StringType.INSTANCE, StringType.INSTANCE, StringType.INSTANCE) ); + /** + * Some javadoc for checkstyle... + */ public AesEncrypt(Expression arg0, Expression arg1) { - super("aes_encrypt", arg0, arg1); + super("aes_encrypt", arg0, arg1, new StringLiteral("AES_128_ECB")); } public AesEncrypt(Expression arg0, Expression arg1, Expression arg2) { @@ -77,9 +79,6 @@ public class AesEncrypt extends AesCryptoFunction { } else if (children().size() == 3) { return new AesEncrypt(children.get(0), children.get(1), children.get(2)); } else { - if (!(children.get(3) instanceof StringLiteral)) { - throw new AnalysisException("the 4th parameter should be string literal: " + this.toSql()); - } return new AesEncrypt(children.get(0), children.get(1), children.get(2), (StringLiteral) children.get(3)); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/AesEncryptV2.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/AesEncryptV2.java new file mode 100644 index 0000000000..08e1d1e915 --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/AesEncryptV2.java @@ -0,0 +1,74 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package org.apache.doris.nereids.trees.expressions.functions.scalar; + +import org.apache.doris.nereids.exceptions.AnalysisException; +import org.apache.doris.nereids.trees.expressions.Expression; +import org.apache.doris.nereids.trees.expressions.literal.StringLiteral; +import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; + +import com.google.common.base.Preconditions; + +import java.util.List; + +/** + * ScalarFunction 'aes_encrypt'. This class is generated by GenerateFunction. + */ +public class AesEncryptV2 extends AesEncrypt { + + /** + * AesEncryptV2 + */ + public AesEncryptV2(Expression arg0, Expression arg1) { + super(arg0, arg1, getDefaultBlockEncryptionMode()); + String blockEncryptionMode = String.valueOf(getDefaultBlockEncryptionMode()); + if (!blockEncryptionMode.toUpperCase().equals("'AES_128_ECB'") + && !blockEncryptionMode.toUpperCase().equals("'AES_192_ECB'") + && !blockEncryptionMode.toUpperCase().equals("'AES_256_ECB'")) { + throw new AnalysisException("Incorrect parameter count in the call to native function 'aes_encrypt'"); + } + } + + public AesEncryptV2(Expression arg0, Expression arg1, Expression arg2) { + super(arg0, arg1, arg2); + } + + public AesEncryptV2(Expression arg0, Expression arg1, Expression arg2, Expression arg3) { + super(arg0, arg1, arg2, arg3); + } + + /** + * withChildren. + */ + @Override + public AesEncryptV2 withChildren(List<Expression> children) { + Preconditions.checkArgument(children.size() >= 2 && children.size() <= 4); + if (children.size() == 2) { + return new AesEncryptV2(children.get(0), children.get(1)); + } else if (children().size() == 3) { + return new AesEncryptV2(children.get(0), children.get(1), children.get(2)); + } else { + return new AesEncryptV2(children.get(0), children.get(1), children.get(2), (StringLiteral) children.get(3)); + } + } + + @Override + public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) { + return visitor.visitAesEncryptV2(this, context); + } +} diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Sm4Decrypt.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Sm4Decrypt.java index 931cdee9e7..022e815f58 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Sm4Decrypt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Sm4Decrypt.java @@ -18,7 +18,6 @@ package org.apache.doris.nereids.trees.expressions.functions.scalar; import org.apache.doris.catalog.FunctionSignature; -import org.apache.doris.nereids.exceptions.AnalysisException; import org.apache.doris.nereids.trees.expressions.Expression; import org.apache.doris.nereids.trees.expressions.literal.StringLiteral; import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; @@ -63,7 +62,7 @@ public class Sm4Decrypt extends Sm4CryptoFunction { * constructor with 2 arguments. */ public Sm4Decrypt(Expression arg0, Expression arg1) { - super("sm4_decrypt", arg0, arg1); + super("sm4_decrypt", arg0, arg1, new StringLiteral("AES_128_ECB")); } /** @@ -88,9 +87,6 @@ public class Sm4Decrypt extends Sm4CryptoFunction { } else if (children().size() == 3) { return new Sm4Decrypt(children.get(0), children.get(1), children.get(2)); } else { - if (!(children.get(3) instanceof StringLiteral)) { - throw new AnalysisException("the 4th parameter should be string literal: " + this.toSql()); - } return new Sm4Decrypt(children.get(0), children.get(1), children.get(2), (StringLiteral) children.get(3)); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Sm4DecryptV2.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Sm4DecryptV2.java new file mode 100644 index 0000000000..4c743a8294 --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Sm4DecryptV2.java @@ -0,0 +1,69 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package org.apache.doris.nereids.trees.expressions.functions.scalar; + +import org.apache.doris.nereids.exceptions.AnalysisException; +import org.apache.doris.nereids.trees.expressions.Expression; +import org.apache.doris.nereids.trees.expressions.literal.StringLiteral; +import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; + +import com.google.common.base.Preconditions; + +import java.util.List; + +/** + * ScalarFunction 'sm4_decrypt'. This class is generated by GenerateFunction. + */ +public class Sm4DecryptV2 extends Sm4Decrypt { + + /** + * Sm4DecryptV2 + */ + public Sm4DecryptV2(Expression arg0, Expression arg1) { + super(arg0, arg1); + throw new AnalysisException("Incorrect parameter count in the call to native function 'sm4_decrypt'"); + } + + public Sm4DecryptV2(Expression arg0, Expression arg1, Expression arg2) { + super(arg0, arg1, arg2); + } + + public Sm4DecryptV2(Expression arg0, Expression arg1, Expression arg2, Expression arg3) { + super(arg0, arg1, arg2, arg3); + } + + /** + * withChildren. + */ + @Override + public Sm4DecryptV2 withChildren(List<Expression> children) { + Preconditions.checkArgument(children.size() >= 2 && children.size() <= 4); + if (children.size() == 2) { + return new Sm4DecryptV2(children.get(0), children.get(1)); + } else if (children().size() == 3) { + return new Sm4DecryptV2(children.get(0), children.get(1), children.get(2)); + } else { + return new Sm4DecryptV2(children.get(0), children.get(1), children.get(2), (StringLiteral) children.get(3)); + } + } + + @Override + public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) { + return visitor.visitSm4DecryptV2(this, context); + } +} diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Sm4Encrypt.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Sm4Encrypt.java index f14593c028..483dbbc9df 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Sm4Encrypt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Sm4Encrypt.java @@ -18,7 +18,6 @@ package org.apache.doris.nereids.trees.expressions.functions.scalar; import org.apache.doris.catalog.FunctionSignature; -import org.apache.doris.nereids.exceptions.AnalysisException; import org.apache.doris.nereids.trees.expressions.Expression; import org.apache.doris.nereids.trees.expressions.literal.StringLiteral; import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; @@ -58,7 +57,7 @@ public class Sm4Encrypt extends Sm4CryptoFunction { * constructor with 2 arguments. */ public Sm4Encrypt(Expression arg0, Expression arg1) { - super("sm4_encrypt", arg0, arg1); + super("sm4_encrypt", arg0, arg1, new StringLiteral("AES_128_ECB")); } /** @@ -83,9 +82,6 @@ public class Sm4Encrypt extends Sm4CryptoFunction { } else if (children().size() == 3) { return new Sm4Encrypt(children.get(0), children.get(1), children.get(2)); } else { - if (!(children.get(3) instanceof StringLiteral)) { - throw new AnalysisException("the 4th parameter should be string literal: " + this.toSql()); - } return new Sm4Encrypt(children.get(0), children.get(1), children.get(2), (StringLiteral) children.get(3)); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Sm4EncryptV2.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Sm4EncryptV2.java new file mode 100644 index 0000000000..7c895fc309 --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Sm4EncryptV2.java @@ -0,0 +1,72 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package org.apache.doris.nereids.trees.expressions.functions.scalar; + +import org.apache.doris.nereids.exceptions.AnalysisException; +import org.apache.doris.nereids.trees.expressions.Expression; +import org.apache.doris.nereids.trees.expressions.literal.StringLiteral; +import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; + +import com.google.common.base.Preconditions; + +import java.util.List; + +/** + * ScalarFunction 'sm4_encrypt'. This class is generated by GenerateFunction. + */ +public class Sm4EncryptV2 extends Sm4Encrypt { + + /** + * constructor with 2 arguments. + */ + public Sm4EncryptV2(Expression arg0, Expression arg1) { + super(arg0, arg1); + throw new AnalysisException("Incorrect parameter count in the call to native function 'sm4_encrypt'"); + } + + /** + * constructor with 3 arguments. + */ + public Sm4EncryptV2(Expression arg0, Expression arg1, Expression arg2) { + super(arg0, arg1, arg2); + } + + public Sm4EncryptV2(Expression arg0, Expression arg1, Expression arg2, Expression arg3) { + super(arg0, arg1, arg2, arg3); + } + + /** + * withChildren. + */ + @Override + public Sm4EncryptV2 withChildren(List<Expression> children) { + Preconditions.checkArgument(children.size() >= 2 && children.size() <= 4); + if (children.size() == 2) { + return new Sm4EncryptV2(children.get(0), children.get(1)); + } else if (children().size() == 3) { + return new Sm4EncryptV2(children.get(0), children.get(1), children.get(2)); + } else { + return new Sm4EncryptV2(children.get(0), children.get(1), children.get(2), (StringLiteral) children.get(3)); + } + } + + @Override + public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) { + return visitor.visitSm4EncryptV2(this, context); + } +} diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java index 98f3e6e95e..21811c40d9 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java @@ -23,7 +23,9 @@ import org.apache.doris.nereids.trees.expressions.StringRegexPredicate; import org.apache.doris.nereids.trees.expressions.functions.scalar.Abs; import org.apache.doris.nereids.trees.expressions.functions.scalar.Acos; import org.apache.doris.nereids.trees.expressions.functions.scalar.AesDecrypt; +import org.apache.doris.nereids.trees.expressions.functions.scalar.AesDecryptV2; import org.apache.doris.nereids.trees.expressions.functions.scalar.AesEncrypt; +import org.apache.doris.nereids.trees.expressions.functions.scalar.AesEncryptV2; import org.apache.doris.nereids.trees.expressions.functions.scalar.AppendTrailingCharIfAbsent; import org.apache.doris.nereids.trees.expressions.functions.scalar.Array; import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayAvg; @@ -259,7 +261,9 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.Sleep; import org.apache.doris.nereids.trees.expressions.functions.scalar.Sm3; import org.apache.doris.nereids.trees.expressions.functions.scalar.Sm3sum; import org.apache.doris.nereids.trees.expressions.functions.scalar.Sm4Decrypt; +import org.apache.doris.nereids.trees.expressions.functions.scalar.Sm4DecryptV2; import org.apache.doris.nereids.trees.expressions.functions.scalar.Sm4Encrypt; +import org.apache.doris.nereids.trees.expressions.functions.scalar.Sm4EncryptV2; import org.apache.doris.nereids.trees.expressions.functions.scalar.Space; import org.apache.doris.nereids.trees.expressions.functions.scalar.SplitByChar; import org.apache.doris.nereids.trees.expressions.functions.scalar.SplitByString; @@ -345,10 +349,18 @@ public interface ScalarFunctionVisitor<R, C> { return visitScalarFunction(aesDecrypt, context); } + default R visitAesDecryptV2(AesDecryptV2 aesDecryptV2, C context) { + return visitScalarFunction(aesDecryptV2, context); + } + default R visitAesEncrypt(AesEncrypt aesEncrypt, C context) { return visitScalarFunction(aesEncrypt, context); } + default R visitAesEncryptV2(AesEncryptV2 aesEncryptV2, C context) { + return visitScalarFunction(aesEncryptV2, context); + } + default R visitAppendTrailingCharIfAbsent(AppendTrailingCharIfAbsent function, C context) { return visitScalarFunction(function, context); } @@ -1305,10 +1317,18 @@ public interface ScalarFunctionVisitor<R, C> { return visitScalarFunction(sm4Decrypt, context); } + default R visitSm4DecryptV2(Sm4DecryptV2 sm4DecryptV2, C context) { + return visitScalarFunction(sm4DecryptV2, context); + } + default R visitSm4Encrypt(Sm4Encrypt sm4Encrypt, C context) { return visitScalarFunction(sm4Encrypt, context); } + default R visitSm4EncryptV2(Sm4EncryptV2 sm4EncryptV2, C context) { + return visitScalarFunction(sm4EncryptV2, context); + } + default R visitSpace(Space space, C context) { return visitScalarFunction(space, context); } diff --git a/gensrc/script/doris_builtins_functions.py b/gensrc/script/doris_builtins_functions.py index f461654853..331ab7d818 100644 --- a/gensrc/script/doris_builtins_functions.py +++ b/gensrc/script/doris_builtins_functions.py @@ -1637,21 +1637,21 @@ visible_functions = [ [['murmur_hash3_64'], 'BIGINT', ['STRING', '...'], ''], # aes and base64 function - [['aes_encrypt'], 'VARCHAR', ['VARCHAR', 'VARCHAR'], 'ALWAYS_NULLABLE'], - [['aes_decrypt'], 'VARCHAR', ['VARCHAR', 'VARCHAR'], 'ALWAYS_NULLABLE'], + [['aes_encrypt'], 'VARCHAR', ['VARCHAR', 'VARCHAR', 'VARCHAR'], 'ALWAYS_NULLABLE'], + [['aes_decrypt'], 'VARCHAR', ['VARCHAR', 'VARCHAR', 'VARCHAR'], 'ALWAYS_NULLABLE'], [['aes_encrypt'], 'VARCHAR', ['VARCHAR', 'VARCHAR', 'VARCHAR', 'VARCHAR'], 'ALWAYS_NULLABLE'], [['aes_decrypt'], 'VARCHAR', ['VARCHAR', 'VARCHAR', 'VARCHAR', 'VARCHAR'], 'ALWAYS_NULLABLE'], - [['sm4_encrypt'], 'VARCHAR', ['VARCHAR', 'VARCHAR'], 'ALWAYS_NULLABLE'], - [['sm4_decrypt'], 'VARCHAR', ['VARCHAR', 'VARCHAR'], 'ALWAYS_NULLABLE'], + [['sm4_encrypt'], 'VARCHAR', ['VARCHAR', 'VARCHAR', 'VARCHAR'], 'ALWAYS_NULLABLE'], + [['sm4_decrypt'], 'VARCHAR', ['VARCHAR', 'VARCHAR', 'VARCHAR'], 'ALWAYS_NULLABLE'], [['sm4_encrypt'], 'VARCHAR', ['VARCHAR', 'VARCHAR', 'VARCHAR', 'VARCHAR'], 'ALWAYS_NULLABLE'], [['sm4_decrypt'], 'VARCHAR', ['VARCHAR', 'VARCHAR', 'VARCHAR', 'VARCHAR'], 'ALWAYS_NULLABLE'], [['from_base64'], 'VARCHAR', ['VARCHAR'], 'ALWAYS_NULLABLE'], - [['aes_encrypt'], 'STRING', ['STRING', 'STRING'], 'ALWAYS_NULLABLE'], - [['aes_decrypt'], 'STRING', ['STRING', 'STRING'], 'ALWAYS_NULLABLE'], + [['aes_encrypt'], 'STRING', ['STRING', 'STRING', 'STRING'], 'ALWAYS_NULLABLE'], + [['aes_decrypt'], 'STRING', ['STRING', 'STRING', 'STRING'], 'ALWAYS_NULLABLE'], [['aes_encrypt'], 'STRING', ['STRING', 'STRING', 'STRING', 'STRING'], 'ALWAYS_NULLABLE'], [['aes_decrypt'], 'STRING', ['STRING', 'STRING', 'STRING', 'STRING'], 'ALWAYS_NULLABLE'], - [['sm4_encrypt'], 'STRING', ['STRING', 'STRING'], 'ALWAYS_NULLABLE'], - [['sm4_decrypt'], 'STRING', ['STRING', 'STRING'], 'ALWAYS_NULLABLE'], + [['sm4_encrypt'], 'STRING', ['STRING', 'STRING', 'STRING'], 'ALWAYS_NULLABLE'], + [['sm4_decrypt'], 'STRING', ['STRING', 'STRING', 'STRING'], 'ALWAYS_NULLABLE'], [['sm4_encrypt'], 'STRING', ['STRING', 'STRING', 'STRING', 'STRING'], 'ALWAYS_NULLABLE'], [['sm4_decrypt'], 'STRING', ['STRING', 'STRING', 'STRING', 'STRING'], 'ALWAYS_NULLABLE'], [['from_base64'], 'STRING', ['STRING'], 'ALWAYS_NULLABLE'], diff --git a/regression-test/data/nereids_function_p0/scalar_function/S.out b/regression-test/data/nereids_function_p0/scalar_function/S.out index d83f4dbd26..a523755733 100644 --- a/regression-test/data/nereids_function_p0/scalar_function/S.out +++ b/regression-test/data/nereids_function_p0/scalar_function/S.out @@ -144,35 +144,6 @@ 2012-03-11T11:10:11 2012-03-12T12:11:12 --- !sql_second_ceil_DateV2 -- -\N -0062-14-03 03:00:00 -0062-14-03 05:00:00 -0062-14-03 07:00:00 -0062-14-03 09:00:00 -0062-14-03 11:00:00 -0001-15-24 13:00:00 -0001-05-13T19:57:49 -0001-15-24 13:49:23 -0001-05-13T19:57:49 -0001-15-24 12:17:60 -0001-05-13T19:57:49 -0001-15-24 13:49:09 - --- !sql_second_ceil_DateV2_notnull -- -0062-14-03 02:00:00 -0062-14-03 04:00:00 -0062-14-03 06:00:00 -0062-14-03 08:00:00 -0062-14-03 10:00:00 -0062-14-03 12:00:00 -0001-15-24 11:60:51 -0001-05-13T19:57:49 -0001-15-24 11:60:51 -0001-05-13T19:57:49 -0001-15-24 11:60:51 -0001-05-13T19:57:49 - -- !sql_second_ceil_DateTime_DateTime -- \N 2012-03-01T01:00:01 @@ -289,64 +260,6 @@ 2012-03-11T11:10:11 2012-03-12T12:11:12 --- !sql_second_ceil_DateV2_DateV2 -- -\N -0062-14-03 03:00:00 -0062-14-03 05:00:00 -0062-14-03 07:00:00 -0062-14-03 09:00:00 -0062-14-03 11:00:00 -0001-15-24 11:00:00 -0001-05-13T19:57:49 -0001-15-24 11:32:26 -0001-05-13T19:57:49 -0001-15-24 11:32:26 -0001-05-13T19:57:17 -0001-15-24 11:32:26 - --- !sql_second_ceil_DateV2_DateV2_notnull -- -0062-14-03 02:00:00 -0062-14-03 04:00:00 -0062-14-03 06:00:00 -0062-14-03 08:00:00 -0062-14-03 10:00:00 -0062-14-03 12:00:00 -0001-15-24 12:20:12 -0001-05-13T19:57:17 -0001-15-24 12:20:12 -0001-05-13T19:57:17 -0001-15-24 12:20:12 -0001-05-13T19:57:17 - --- !sql_second_ceil_DateV2_Integer -- -\N -0062-14-03 03:00:00 -0062-14-03 05:00:00 -0062-14-03 07:00:00 -0062-14-03 09:00:00 -0062-14-03 11:00:00 -0000-00-00 00:00:00 -0000-00-00 00:00:00 -0001-15-24 11:34:23 -g508-13-25 21:13:00 -0000-00-00 00:00:00 -0000-00-00 00:00:00 -0000-00-00 00:00:00 - --- !sql_second_ceil_DateV2_Integer_notnull -- -0062-14-03 02:00:00 -0062-14-03 04:00:00 -0062-14-03 06:00:00 -0062-14-03 08:00:00 -0062-14-03 10:00:00 -0062-14-03 12:00:00 -0001-15-24 11:32:30 -0001-05-13T19:57:49 -0001-15-24 11:32:30 -0001-05-13T19:57:49 -0001-15-24 11:32:30 -0001-05-13T19:57:49 - -- !sql_second_ceil_DateTime_Integer_DateTime -- \N 2012-03-01T01:00:01 @@ -405,35 +318,6 @@ g508-13-25 21:13:00 2012-03-11T11:10:11 2012-03-12T12:11:12 --- !sql_second_ceil_DateV2_Integer_DateV2 -- -\N -0062-14-03 03:00:00 -0062-14-03 05:00:00 -0062-14-03 07:00:00 -0062-14-03 09:00:00 -0062-14-03 11:00:00 -0001-15-24 11:00:00 -0001-05-13T19:57:49 -0001-15-24 11:34:54 -0001-05-13T19:57:49 -0001-15-24 11:34:54 -0001-05-13T19:57:17 -0001-15-24 11:34:30 - --- !sql_second_ceil_DateV2_Integer_DateV2_notnull -- -0062-14-03 02:00:00 -0062-14-03 04:00:00 -0062-14-03 06:00:00 -0062-14-03 08:00:00 -0062-14-03 10:00:00 -0062-14-03 12:00:00 -0001-15-24 13:47:51 -0001-05-13T19:57:49 -0001-15-24 13:47:51 -0001-05-13T19:57:49 -0001-15-24 13:47:51 -0001-05-13T19:57:17 - -- !sql_second_floor_DateTime -- \N 2012-03-01T01:00:01 @@ -492,35 +376,6 @@ g508-13-25 21:13:00 2012-03-11T11:10:11 2012-03-12T12:11:12 --- !sql_second_floor_DateV2 -- -\N -0062-14-03 03:00:00 -0062-14-03 05:00:00 -0062-14-03 07:00:00 -0062-14-03 09:00:00 -0062-14-03 11:00:00 -0001-15-24 11:00:00 -0001-05-13T19:57:49 -0001-15-24 11:33:28 -0001-05-13T19:57:49 -0001-15-24 11:33:28 -0001-05-13T19:57:49 -0001-15-24 13:47:18 - --- !sql_second_floor_DateV2_notnull -- -0062-14-03 02:00:00 -0062-14-03 04:00:00 -0062-14-03 06:00:00 -0062-14-03 08:00:00 -0062-14-03 10:00:00 -0062-14-03 12:00:00 -0001-15-24 11:32:26 -0001-05-13T19:57:17 -0001-15-24 11:32:26 -0001-05-13T19:57:17 -0001-15-24 11:32:26 -0001-05-13T19:57:17 - -- !sql_second_floor_DateTime_DateTime -- \N 2012-03-01T01:00:01 @@ -637,64 +492,6 @@ g508-13-25 21:13:00 2012-03-11T11:10:11 2012-03-12T12:11:12 --- !sql_second_floor_DateV2_DateV2 -- -\N -0062-14-03 03:00:00 -0062-14-03 05:00:00 -0062-14-03 07:00:00 -0062-14-03 09:00:00 -0062-14-03 11:00:00 -0001-15-24 13:00:00 -0001-05-13T19:57:15 -0001-15-24 13:43:49 -0001-05-13T19:57:15 -0001-15-24 13:43:49 -0001-05-13T19:57:15 -0001-15-24 13:43:49 - --- !sql_second_floor_DateV2_DateV2_notnull -- -0062-14-03 02:00:00 -0062-14-03 04:00:00 -0062-14-03 06:00:00 -0062-14-03 08:00:00 -0062-14-03 10:00:00 -0062-14-03 12:00:00 -0000-00-00 00:00:00 -0000-00-00 00:00:00 -0000-00-00 00:00:00 -0000-00-00 01:33:58 -0000-00-00 00:00:00 -0000-00-00 00:00:00 - --- !sql_second_floor_DateV2_Integer -- -\N -0062-14-03 03:00:00 -0062-14-03 05:00:00 -0062-14-03 06:00:00 -0062-14-03 09:00:00 -0062-14-03 10:00:00 -0001-15-24 12:00:00 -0001-05-13T19:57:17 -0001-15-24 12:50:12 -0001-05-13T19:57:17 -0001-15-24 12:50:13 -0001-05-13T19:57:17 -0001-15-24 12:50:12 - --- !sql_second_floor_DateV2_Integer_notnull -- -0062-14-03 02:00:00 -0062-14-03 04:00:00 -0062-14-03 06:00:00 -0062-14-03 08:00:00 -0062-14-03 10:00:00 -0062-14-03 12:00:00 -0001-15-24 13:48:31 -0001-05-13T19:57:15 -0001-15-24 13:48:31 -0001-05-13T19:57:15 -0001-15-24 13:48:31 -0001-05-13T19:57:15 - -- !sql_second_floor_DateTime_Integer_DateTime -- \N 2012-03-01T01:00:01 @@ -753,35 +550,6 @@ g508-13-25 21:13:00 2012-03-11T11:10:11 2012-03-12T12:11:12 --- !sql_second_floor_DateV2_Integer_DateV2 -- -\N -0062-14-03 03:00:00 -0062-14-03 05:00:00 -0062-14-03 07:00:00 -0062-14-03 09:00:00 -0062-14-03 11:00:00 -0001-15-24 11:00:00 -0001-05-13T19:57:17 -0001-15-24 11:37:20 -0001-05-13T19:57:17 -0001-15-24 11:37:20 -0001-05-13T19:57:17 -0001-15-24 11:37:20 - --- !sql_second_floor_DateV2_Integer_DateV2_notnull -- -0062-14-03 02:00:00 -0062-14-03 04:00:00 -0062-14-03 06:00:00 -0062-14-03 08:00:00 -0062-14-03 10:00:00 -0062-14-03 12:00:00 -0001-15-24 13:48:21 -0001-05-13T19:57:49 -0001-15-24 13:48:21 -0001-05-13T19:57:49 -0001-15-24 11:32:24 -0001-05-13T19:57:17 - -- !sql_seconds_add_DateTime_Integer -- \N 2012-03-01T01:00:02 diff --git a/regression-test/data/nereids_p0/sql_functions/encryption_digest/test_encryption_function.out b/regression-test/data/nereids_p0/sql_functions/encryption_digest/test_encryption_function.out index eefeb3c040..982f3bd159 100644 --- a/regression-test/data/nereids_p0/sql_functions/encryption_digest/test_encryption_function.out +++ b/regression-test/data/nereids_p0/sql_functions/encryption_digest/test_encryption_function.out @@ -3,7 +3,7 @@ wr2JEDVXzL9+2XtRhgIloA== -- !sql -- -tsmK1HzbpnEdR2//WhO+MA== +wr2JEDVXzL9+2XtRhgIloA== -- !sql -- text @@ -12,19 +12,22 @@ text \N -- !sql -- -900150983cd24fb0d6963f7d28e17f72 +wr2JEDVXzL9+2XtRhgIloA== -- !sql -- -e2fc714c4727ee9395f324cd2e7f331f +wr2JEDVXzL9+2XtRhgIloA== -- !sql -- -e2fc714c4727ee9395f324cd2e7f331f +text -- !sql -- -aDjwRflBrDjhBZIOFNw3Tg== +\N -- !sql -- -1Y4NGIukSbv9OrkZnRD1bQ== +wr2JEDVXzL9+2XtRhgIloA== + +-- !sql -- +BO2vxHeUcw5BQQalSBbo1w== -- !sql -- text @@ -33,13 +36,22 @@ text \N -- !sql -- -66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0 +text -- !sql -- -82ec580fe6d36ae4f81cae3c73f4a5b3b5a09c943172dc9053c69fd8e18dca1e +BO2vxHeUcw5BQQalSBbo1w== -- !sql -- -82ec580fe6d36ae4f81cae3c73f4a5b3b5a09c943172dc9053c69fd8e18dca1e +BO2vxHeUcw5BQQalSBbo1w== + +-- !sql -- +\N + +-- !sql -- +text + +-- !sql -- +text -- !sql -- wr2JEDVXzL9+2XtRhgIloA== @@ -47,33 +59,72 @@ wr2JEDVXzL9+2XtRhgIloA== -- !sql -- tsmK1HzbpnEdR2//WhO+MA== +-- !sql -- +ciacXDLHMNG7CD9Kws8png== + +-- !sql -- +text + +-- !sql -- +\N + -- !sql -- text +-- !sql -- +text + +-- !sql -- +tsmK1HzbpnEdR2//WhO+MA== + +-- !sql -- +ciacXDLHMNG7CD9Kws8png== + -- !sql -- \N -- !sql -- -900150983cd24fb0d6963f7d28e17f72 +text + +-- !sql -- +text -- !sql -- -e2fc714c4727ee9395f324cd2e7f331f +wr2JEDVXzL9+2XtRhgIloA== -- !sql -- -e2fc714c4727ee9395f324cd2e7f331f +1Y4NGIukSbv9OrkZnRD1bQ== -- !sql -- -aDjwRflBrDjhBZIOFNw3Tg== +G5POcFAJwiZHeTtN6DjInQ== + +-- !sql -- +text + +-- !sql -- +text + +-- !sql -- +\N + +-- !sql -- +text -- !sql -- 1Y4NGIukSbv9OrkZnRD1bQ== +-- !sql -- +G5POcFAJwiZHeTtN6DjInQ== + -- !sql -- text -- !sql -- \N +-- !sql -- +text + -- !sql -- 66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0 diff --git a/regression-test/data/query_p0/sql_functions/encryption_digest/test_encryption_function.out b/regression-test/data/query_p0/sql_functions/encryption_digest/test_encryption_function.out index a57593446e..04d98ba39c 100644 --- a/regression-test/data/query_p0/sql_functions/encryption_digest/test_encryption_function.out +++ b/regression-test/data/query_p0/sql_functions/encryption_digest/test_encryption_function.out @@ -3,7 +3,7 @@ wr2JEDVXzL9+2XtRhgIloA== -- !sql -- -tsmK1HzbpnEdR2//WhO+MA== +wr2JEDVXzL9+2XtRhgIloA== -- !sql -- text @@ -12,19 +12,22 @@ text \N -- !sql -- -900150983cd24fb0d6963f7d28e17f72 +wr2JEDVXzL9+2XtRhgIloA== -- !sql -- -e2fc714c4727ee9395f324cd2e7f331f +wr2JEDVXzL9+2XtRhgIloA== -- !sql -- -e2fc714c4727ee9395f324cd2e7f331f +text -- !sql -- -aDjwRflBrDjhBZIOFNw3Tg== +\N -- !sql -- -1Y4NGIukSbv9OrkZnRD1bQ== +wr2JEDVXzL9+2XtRhgIloA== + +-- !sql -- +BO2vxHeUcw5BQQalSBbo1w== -- !sql -- text @@ -33,13 +36,22 @@ text \N -- !sql -- -66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0 +text -- !sql -- -82ec580fe6d36ae4f81cae3c73f4a5b3b5a09c943172dc9053c69fd8e18dca1e +BO2vxHeUcw5BQQalSBbo1w== -- !sql -- -82ec580fe6d36ae4f81cae3c73f4a5b3b5a09c943172dc9053c69fd8e18dca1e +BO2vxHeUcw5BQQalSBbo1w== + +-- !sql -- +\N + +-- !sql -- +text + +-- !sql -- +text -- !sql -- wr2JEDVXzL9+2XtRhgIloA== @@ -47,6 +59,9 @@ wr2JEDVXzL9+2XtRhgIloA== -- !sql -- tsmK1HzbpnEdR2//WhO+MA== +-- !sql -- +ciacXDLHMNG7CD9Kws8png== + -- !sql -- text @@ -54,17 +69,65 @@ text \N -- !sql -- -aDjwRflBrDjhBZIOFNw3Tg== +text + +-- !sql -- +text + +-- !sql -- +tsmK1HzbpnEdR2//WhO+MA== + +-- !sql -- +ciacXDLHMNG7CD9Kws8png== + +-- !sql -- +\N + +-- !sql -- +\N + +-- !sql -- +text + +-- !sql -- +text + +-- !sql -- +wr2JEDVXzL9+2XtRhgIloA== -- !sql -- 1Y4NGIukSbv9OrkZnRD1bQ== +-- !sql -- +G5POcFAJwiZHeTtN6DjInQ== + +-- !sql -- +text + -- !sql -- text -- !sql -- \N +-- !sql -- +text + +-- !sql -- +1Y4NGIukSbv9OrkZnRD1bQ== + +-- !sql -- +G5POcFAJwiZHeTtN6DjInQ== + +-- !sql -- +text + +-- !sql -- +\N + +-- !sql -- +text + -- !sql -- 66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0 diff --git a/regression-test/suites/nereids_function_p0/scalar_function/S.groovy b/regression-test/suites/nereids_function_p0/scalar_function/S.groovy index c1d9b0bcf3..be1a19b85e 100644 --- a/regression-test/suites/nereids_function_p0/scalar_function/S.groovy +++ b/regression-test/suites/nereids_function_p0/scalar_function/S.groovy @@ -98,9 +98,25 @@ suite("nereids_scalar_fn_S") { qt_sql_sm3sum_String "select sm3sum(kstr) from fn_test order by kstr" qt_sql_sm3sum_String_notnull "select sm3sum(kstr) from fn_test_not_nullable order by kstr" sql "select sm4_decrypt(kvchrs1, kvchrs1) from fn_test order by kvchrs1, kvchrs1" + test { + sql "select sm4_decrypt_v2(kvchrs1, kvchrs1) from fn_test order by kvchrs1, kvchrs1" + exception "Incorrect parameter count in the call to native function 'sm4_decrypt'" + } sql "select sm4_decrypt(kvchrs1, kvchrs1) from fn_test_not_nullable order by kvchrs1, kvchrs1" + test { + sql "select sm4_decrypt_v2(kvchrs1, kvchrs1) from fn_test_not_nullable order by kvchrs1, kvchrs1" + exception "Incorrect parameter count in the call to native function 'sm4_decrypt'" + } sql "select sm4_decrypt(kstr, kstr) from fn_test order by kstr, kstr" + test { + sql "select sm4_decrypt_v2(kstr, kstr) from fn_test order by kstr, kstr" + exception "Incorrect parameter count in the call to native function 'sm4_decrypt'" + } sql "select sm4_decrypt(kstr, kstr) from fn_test_not_nullable order by kstr, kstr" + test { + sql "select sm4_decrypt_v2(kstr, kstr) from fn_test_not_nullable order by kstr, kstr" + exception "Incorrect parameter count in the call to native function 'sm4_decrypt'" + } sql "select sm4_decrypt(kvchrs1, kvchrs1, kvchrs1) from fn_test order by kvchrs1, kvchrs1, kvchrs1" sql "select sm4_decrypt(kvchrs1, kvchrs1, kvchrs1) from fn_test_not_nullable order by kvchrs1, kvchrs1, kvchrs1" sql "select sm4_decrypt(kstr, kstr, kstr) from fn_test order by kstr, kstr, kstr" @@ -109,10 +125,34 @@ suite("nereids_scalar_fn_S") { sql "select sm4_decrypt(kvchrs1, kvchrs1, kvchrs1, 'SM4_128_ECB') from fn_test_not_nullable order by kvchrs1, kvchrs1, kvchrs1" sql "select sm4_decrypt(kstr, kstr, kstr, 'SM4_128_ECB') from fn_test order by kstr, kstr, kstr" sql "select sm4_decrypt(kstr, kstr, kstr, 'SM4_128_ECB') from fn_test_not_nullable order by kstr, kstr, kstr" + sql "select sm4_decrypt_v2(kvchrs1, kvchrs1, kvchrs1) from fn_test order by kvchrs1, kvchrs1, kvchrs1" + sql "select sm4_decrypt_v2(kvchrs1, kvchrs1, kvchrs1) from fn_test_not_nullable order by kvchrs1, kvchrs1, kvchrs1" + sql "select sm4_decrypt_v2(kstr, kstr, kstr) from fn_test order by kstr, kstr, kstr" + sql "select sm4_decrypt_v2(kstr, kstr, kstr) from fn_test_not_nullable order by kstr, kstr, kstr" + sql "select sm4_decrypt_v2(kvchrs1, kvchrs1, kvchrs1, 'SM4_128_ECB') from fn_test order by kvchrs1, kvchrs1, kvchrs1" + sql "select sm4_decrypt_v2(kvchrs1, kvchrs1, kvchrs1, 'SM4_128_ECB') from fn_test_not_nullable order by kvchrs1, kvchrs1, kvchrs1" + sql "select sm4_decrypt_v2(kstr, kstr, kstr, 'SM4_128_ECB') from fn_test order by kstr, kstr, kstr" + sql "select sm4_decrypt_v2(kstr, kstr, kstr, 'SM4_128_ECB') from fn_test_not_nullable order by kstr, kstr, kstr" sql "select sm4_encrypt(kvchrs1, kvchrs1) from fn_test order by kvchrs1, kvchrs1" + test { + sql "select sm4_encrypt_v2(kvchrs1, kvchrs1) from fn_test order by kvchrs1, kvchrs1" + exception "Incorrect parameter count in the call to native function 'sm4_encrypt'" + } sql "select sm4_encrypt(kvchrs1, kvchrs1) from fn_test_not_nullable order by kvchrs1, kvchrs1" + test { + sql "select sm4_encrypt_v2(kvchrs1, kvchrs1) from fn_test_not_nullable order by kvchrs1, kvchrs1" + exception "Incorrect parameter count in the call to native function 'sm4_encrypt'" + } sql "select sm4_encrypt(kstr, kstr) from fn_test order by kstr, kstr" + test { + sql "select sm4_encrypt_v2(kstr, kstr) from fn_test order by kstr, kstr" + exception "Incorrect parameter count in the call to native function 'sm4_encrypt'" + } sql "select sm4_encrypt(kstr, kstr) from fn_test_not_nullable order by kstr, kstr" + test { + sql "select sm4_encrypt_v2(kstr, kstr) from fn_test_not_nullable order by kstr, kstr" + exception "Incorrect parameter count in the call to native function 'sm4_encrypt'" + } sql "select sm4_encrypt(kvchrs1, kvchrs1, kvchrs1) from fn_test order by kvchrs1, kvchrs1, kvchrs1" sql "select sm4_encrypt(kvchrs1, kvchrs1, kvchrs1) from fn_test_not_nullable order by kvchrs1, kvchrs1, kvchrs1" sql "select sm4_encrypt(kstr, kstr, kstr) from fn_test order by kstr, kstr, kstr" @@ -121,6 +161,14 @@ suite("nereids_scalar_fn_S") { sql "select sm4_encrypt(kvchrs1, kvchrs1, kvchrs1, 'SM4_128_ECB') from fn_test_not_nullable order by kvchrs1, kvchrs1, kvchrs1" sql "select sm4_encrypt(kstr, kstr, kstr, 'SM4_128_ECB') from fn_test order by kstr, kstr, kstr" sql "select sm4_encrypt(kstr, kstr, kstr, 'SM4_128_ECB') from fn_test_not_nullable order by kstr, kstr, kstr" + sql "select sm4_encrypt_v2(kvchrs1, kvchrs1, kvchrs1) from fn_test order by kvchrs1, kvchrs1, kvchrs1" + sql "select sm4_encrypt_v2(kvchrs1, kvchrs1, kvchrs1) from fn_test_not_nullable order by kvchrs1, kvchrs1, kvchrs1" + sql "select sm4_encrypt_v2(kstr, kstr, kstr) from fn_test order by kstr, kstr, kstr" + sql "select sm4_encrypt_v2(kstr, kstr, kstr) from fn_test_not_nullable order by kstr, kstr, kstr" + sql "select sm4_encrypt_v2(kvchrs1, kvchrs1, kvchrs1, 'SM4_128_ECB') from fn_test order by kvchrs1, kvchrs1, kvchrs1" + sql "select sm4_encrypt_v2(kvchrs1, kvchrs1, kvchrs1, 'SM4_128_ECB') from fn_test_not_nullable order by kvchrs1, kvchrs1, kvchrs1" + sql "select sm4_encrypt_v2(kstr, kstr, kstr, 'SM4_128_ECB') from fn_test order by kstr, kstr, kstr" + sql "select sm4_encrypt_v2(kstr, kstr, kstr, 'SM4_128_ECB') from fn_test_not_nullable order by kstr, kstr, kstr" sql "select space(10) from fn_test order by kint" sql "select space(10) from fn_test_not_nullable order by kint" qt_sql_split_part_Varchar_Varchar_Integer "select split_part(kvchrs1, ' ', 1) from fn_test order by kvchrs1" diff --git a/regression-test/suites/nereids_p0/sql_functions/encryption_digest/test_encryption_function.groovy b/regression-test/suites/nereids_p0/sql_functions/encryption_digest/test_encryption_function.groovy index e2bcd55f2c..887c74091d 100644 --- a/regression-test/suites/nereids_p0/sql_functions/encryption_digest/test_encryption_function.groovy +++ b/regression-test/suites/nereids_p0/sql_functions/encryption_digest/test_encryption_function.groovy @@ -16,49 +16,111 @@ // under the License. suite("test_encryption_function") { + def tableName = "dwd_candidates" + sql "DROP TABLE IF EXISTS ${tableName}" + sql """ + CREATE TABLE IF NOT EXISTS ${tableName} ( + c_int INT, + `name` varchar(65530) NULL COMMENT "" + ) + DISTRIBUTED BY HASH(c_int) BUCKETS 1 + PROPERTIES ( + "replication_num" = "1" + ) + """ + sql "SET enable_nereids_planner=true" - sql "SET enable_vectorized_engine=true" - sql "SET enable_fallback_to_original_planner=false" sql "set batch_size = 4096;" - sql "set block_encryption_mode=\"AES_256_CBC\";" - qt_sql "SELECT TO_BASE64(AES_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3'));" - qt_sql "SELECT TO_BASE64(AES_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789'));" - qt_sql "SELECT AES_DECRYPT(FROM_BASE64('wr2JEDVXzL9+2XtRhgIloA=='),'F3229A0B371ED2D9441B830D21A390C3');" - qt_sql "SELECT AES_DECRYPT(FROM_BASE64('mvZT1KJw7N0RJf27aipUpg=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" - - qt_sql "SELECT MD5(\"abc\");" + sql "set block_encryption_mode=\"AES_128_ECB\";" + qt_sql "SELECT TO_BASE64(AES_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3'));" // 'wr2JEDVXzL9+2XtRhgIloA==' + qt_sql "SELECT TO_BASE64(AES_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789'));" // wr2JEDVXzL9+2XtRhgIloA== + qt_sql "SELECT AES_DECRYPT(FROM_BASE64('wr2JEDVXzL9+2XtRhgIloA=='),'F3229A0B371ED2D9441B830D21A390C3');" // text + qt_sql "SELECT AES_DECRYPT(FROM_BASE64('mvZT1KJw7N0RJf27aipUpg=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" // NULL - qt_sql "SELECT MD5(\"abcd\");" - qt_sql "SELECT MD5SUM(\"ab\",\"cd\");" - - sql "set block_encryption_mode=\"SM4_128_CBC\";" - qt_sql "SELECT TO_BASE64(SM4_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3'));" - qt_sql "SELECT TO_BASE64(SM4_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789'));" - qt_sql "SELECT SM4_DECRYPT(FROM_BASE64('aDjwRflBrDjhBZIOFNw3Tg=='),'F3229A0B371ED2D9441B830D21A390C3');" - qt_sql "SELECT SM4_DECRYPT(FROM_BASE64('G7yqOKfEyxdagboz6Qf01A=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" + sql "set block_encryption_mode=\"AES_128_ECB\";" + qt_sql "SELECT TO_BASE64(AES_ENCRYPT_v2('text','F3229A0B371ED2D9441B830D21A390C3'));" // 'wr2JEDVXzL9+2XtRhgIloA==' + qt_sql "SELECT TO_BASE64(AES_ENCRYPT_v2('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789'));" // wr2JEDVXzL9+2XtRhgIloA== + qt_sql "SELECT AES_DECRYPT_v2(FROM_BASE64('wr2JEDVXzL9+2XtRhgIloA=='),'F3229A0B371ED2D9441B830D21A390C3');" // text + qt_sql "SELECT AES_DECRYPT_v2(FROM_BASE64('mvZT1KJw7N0RJf27aipUpg=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" // NULL + test { + sql "SELECT TO_BASE64(SM4_ENCRYPT_v2('text','F3229A0B371ED2D9441B830D21A390C3'));" + exception "session variable block_encryption_mode is invalid with sm4" + } - qt_sql "SELECT SM3(\"abc\");" - qt_sql "select sm3(\"abcd\");" - qt_sql "select sm3sum(\"ab\",\"cd\");" + sql "set block_encryption_mode=\"AES_256_ECB\";" + qt_sql "SELECT TO_BASE64(AES_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3'));" // 'wr2JEDVXzL9+2XtRhgIloA==' + qt_sql "SELECT TO_BASE64(AES_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789'));" // 'BO2vxHeUcw5BQQalSBbo1w==' + qt_sql "SELECT AES_DECRYPT(FROM_BASE64('wr2JEDVXzL9+2XtRhgIloA=='),'F3229A0B371ED2D9441B830D21A390C3');" // text + qt_sql "SELECT AES_DECRYPT(FROM_BASE64('BO2vxHeUcw5BQQalSBbo1w=='),'F3229A0B371ED2D9441B830D21A390C3');" // NULL + qt_sql "SELECT AES_DECRYPT(FROM_BASE64('BO2vxHeUcw5BQQalSBbo1w=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" // text + sql "set block_encryption_mode=\"AES_256_ECB\";" + qt_sql "SELECT TO_BASE64(AES_ENCRYPT_v2('text','F3229A0B371ED2D9441B830D21A390C3'));" // 'BO2vxHeUcw5BQQalSBbo1w==' + qt_sql "SELECT TO_BASE64(AES_ENCRYPT_v2('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789'));" // 'BO2vxHeUcw5BQQalSBbo1w==' + qt_sql "SELECT AES_DECRYPT_v2(FROM_BASE64('wr2JEDVXzL9+2XtRhgIloA=='),'F3229A0B371ED2D9441B830D21A390C3');" // NULL + qt_sql "SELECT AES_DECRYPT_v2(FROM_BASE64('BO2vxHeUcw5BQQalSBbo1w=='),'F3229A0B371ED2D9441B830D21A390C3');" // text + qt_sql "SELECT AES_DECRYPT_v2(FROM_BASE64('BO2vxHeUcw5BQQalSBbo1w=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" // text sql "set block_encryption_mode=\"AES_256_CBC\";" - qt_sql "SELECT TO_BASE64(AES_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3'));" - qt_sql "SELECT TO_BASE64(AES_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789'));" - qt_sql "SELECT AES_DECRYPT(FROM_BASE64('wr2JEDVXzL9+2XtRhgIloA=='),'F3229A0B371ED2D9441B830D21A390C3');" - qt_sql "SELECT AES_DECRYPT(FROM_BASE64('mvZT1KJw7N0RJf27aipUpg=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" + qt_sql "SELECT TO_BASE64(AES_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3'));" // 'wr2JEDVXzL9+2XtRhgIloA==' + qt_sql "SELECT TO_BASE64(AES_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789'));" // tsmK1HzbpnEdR2//WhO+MA== + qt_sql "SELECT TO_BASE64(AES_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789ff'));" // ciacXDLHMNG7CD9Kws8png== + qt_sql "SELECT AES_DECRYPT(FROM_BASE64('wr2JEDVXzL9+2XtRhgIloA=='),'F3229A0B371ED2D9441B830D21A390C3');" // text + qt_sql "SELECT AES_DECRYPT(FROM_BASE64('mvZT1KJw7N0RJf27aipUpg=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" // NULL + qt_sql "SELECT AES_DECRYPT(FROM_BASE64('tsmK1HzbpnEdR2//WhO+MA=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" // text + qt_sql "SELECT AES_DECRYPT(FROM_BASE64('ciacXDLHMNG7CD9Kws8png=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789ff');" // text + explain { + sql "SELECT AES_DECRYPT(UNHEX(r_2_3.`name`), 'namePnhe3E0MWyfZivUnVzDy12caymnrKp', '0123456789') AS x0 FROM dwd_candidates AS r_2_3\n" + + "GROUP BY x0;" + } - qt_sql "SELECT MD5(\"abc\");" + sql "set block_encryption_mode=\"AES_256_CBC\";" + test { + sql "SELECT TO_BASE64(AES_ENCRYPT_v2('text','F3229A0B371ED2D9441B830D21A390C3'));" + exception "Incorrect parameter count in the call to native function 'aes_encrypt'" + } + qt_sql "SELECT TO_BASE64(AES_ENCRYPT_v2('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789'));" // tsmK1HzbpnEdR2//WhO+MA== + qt_sql "SELECT TO_BASE64(AES_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789ff'));" // ciacXDLHMNG7CD9Kws8png== + test { + sql "SELECT AES_DECRYPT_v2(FROM_BASE64('wr2JEDVXzL9+2XtRhgIloA=='),'F3229A0B371ED2D9441B830D21A390C3');" + exception "Incorrect parameter count in the call to native function 'aes_decrypt'" + } + qt_sql "SELECT AES_DECRYPT_v2(FROM_BASE64('mvZT1KJw7N0RJf27aipUpg=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" // NULL + qt_sql "SELECT AES_DECRYPT_v2(FROM_BASE64('tsmK1HzbpnEdR2//WhO+MA=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" // text + qt_sql "SELECT AES_DECRYPT_v2(FROM_BASE64('ciacXDLHMNG7CD9Kws8png=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789ff');" // text + explain { + sql "SELECT AES_DECRYPT_v2(UNHEX(r_2_3.`name`), 'namePnhe3E0MWyfZivUnVzDy12caymnrKp', '0123456789') AS x0 FROM dwd_candidates AS r_2_3\n" + + "GROUP BY x0;" + } - qt_sql "SELECT MD5(\"abcd\");" - qt_sql "SELECT MD5SUM(\"ab\",\"cd\");" + sql "set block_encryption_mode=\"SM4_128_CBC\";" + qt_sql "SELECT TO_BASE64(SM4_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3'));" // 'wr2JEDVXzL9+2XtRhgIloA==' + qt_sql "SELECT TO_BASE64(SM4_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789'));" // 1Y4NGIukSbv9OrkZnRD1bQ== + qt_sql "SELECT TO_BASE64(SM4_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789ff'));" // G5POcFAJwiZHeTtN6DjInQ== + qt_sql "SELECT SM4_DECRYPT(FROM_BASE64('wr2JEDVXzL9+2XtRhgIloA=='),'F3229A0B371ED2D9441B830D21A390C3');" // text + qt_sql "SELECT SM4_DECRYPT(FROM_BASE64('1Y4NGIukSbv9OrkZnRD1bQ=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" // text + qt_sql "SELECT SM4_DECRYPT(FROM_BASE64('G5POcFAJwiZHeTtN6DjInQ=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" // NULL + qt_sql "SELECT SM4_DECRYPT(FROM_BASE64('G5POcFAJwiZHeTtN6DjInQ=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789ff');" // text sql "set block_encryption_mode=\"SM4_128_CBC\";" - qt_sql "SELECT TO_BASE64(SM4_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3'));" - qt_sql "SELECT TO_BASE64(SM4_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789'));" - qt_sql "SELECT SM4_DECRYPT(FROM_BASE64('aDjwRflBrDjhBZIOFNw3Tg=='),'F3229A0B371ED2D9441B830D21A390C3');" - qt_sql "SELECT SM4_DECRYPT(FROM_BASE64('G7yqOKfEyxdagboz6Qf01A=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" + test { + sql "SELECT TO_BASE64(SM4_ENCRYPT_v2('text','F3229A0B371ED2D9441B830D21A390C3'));" + exception "Incorrect parameter count in the call to native function 'sm4_encrypt'" + } + qt_sql "SELECT TO_BASE64(SM4_ENCRYPT_v2('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789'));" // 1Y4NGIukSbv9OrkZnRD1bQ== + qt_sql "SELECT TO_BASE64(SM4_ENCRYPT_v2('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789ff'));" // G5POcFAJwiZHeTtN6DjInQ== + test { + sql "SELECT SM4_DECRYPT_v2(FROM_BASE64('aDjwRflBrDjhBZIOFNw3Tg=='),'F3229A0B371ED2D9441B830D21A390C3');" + exception "Incorrect parameter count in the call to native function 'sm4_decrypt'" + } + qt_sql "SELECT SM4_DECRYPT_v2(FROM_BASE64('1Y4NGIukSbv9OrkZnRD1bQ=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" // text + qt_sql "SELECT SM4_DECRYPT_v2(FROM_BASE64('G5POcFAJwiZHeTtN6DjInQ=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" // NULL + qt_sql "SELECT SM4_DECRYPT_v2(FROM_BASE64('G5POcFAJwiZHeTtN6DjInQ=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789ff');" // text + test { + sql "SELECT TO_BASE64(AES_ENCRYPT_v2('text','F3229A0B371ED2D9441B830D21A390C3'));" + exception "session variable block_encryption_mode is invalid with aes" + } qt_sql "SELECT SM3(\"abc\");" qt_sql "select sm3(\"abcd\");" diff --git a/regression-test/suites/query_p0/sql_functions/encryption_digest/test_encryption_function.groovy b/regression-test/suites/query_p0/sql_functions/encryption_digest/test_encryption_function.groovy index 1f0c64f357..06562c410d 100644 --- a/regression-test/suites/query_p0/sql_functions/encryption_digest/test_encryption_function.groovy +++ b/regression-test/suites/query_p0/sql_functions/encryption_digest/test_encryption_function.groovy @@ -30,45 +30,104 @@ suite("test_encryption_function") { """ sql "set batch_size = 4096;" - sql "set block_encryption_mode=\"AES_256_CBC\";" - qt_sql "SELECT TO_BASE64(AES_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3'));" - qt_sql "SELECT TO_BASE64(AES_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789'));" - qt_sql "SELECT AES_DECRYPT(FROM_BASE64('wr2JEDVXzL9+2XtRhgIloA=='),'F3229A0B371ED2D9441B830D21A390C3');" - qt_sql "SELECT AES_DECRYPT(FROM_BASE64('mvZT1KJw7N0RJf27aipUpg=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" + sql "set block_encryption_mode=\"AES_128_ECB\";" + qt_sql "SELECT TO_BASE64(AES_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3'));" // 'wr2JEDVXzL9+2XtRhgIloA==' + qt_sql "SELECT TO_BASE64(AES_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789'));" // wr2JEDVXzL9+2XtRhgIloA== + qt_sql "SELECT AES_DECRYPT(FROM_BASE64('wr2JEDVXzL9+2XtRhgIloA=='),'F3229A0B371ED2D9441B830D21A390C3');" // text + qt_sql "SELECT AES_DECRYPT(FROM_BASE64('mvZT1KJw7N0RJf27aipUpg=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" // NULL + test { + sql "SELECT TO_BASE64(SM4_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3'));" + exception "session variable block_encryption_mode is invalid with sm4" + } - qt_sql "SELECT MD5(\"abc\");" + sql "set block_encryption_mode=\"AES_128_ECB\";" + qt_sql "SELECT TO_BASE64(AES_ENCRYPT_v2('text','F3229A0B371ED2D9441B830D21A390C3'));" // 'wr2JEDVXzL9+2XtRhgIloA==' + qt_sql "SELECT TO_BASE64(AES_ENCRYPT_v2('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789'));" // wr2JEDVXzL9+2XtRhgIloA== + qt_sql "SELECT AES_DECRYPT_v2(FROM_BASE64('wr2JEDVXzL9+2XtRhgIloA=='),'F3229A0B371ED2D9441B830D21A390C3');" // text + qt_sql "SELECT AES_DECRYPT_v2(FROM_BASE64('mvZT1KJw7N0RJf27aipUpg=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" // NULL + test { + sql "SELECT TO_BASE64(SM4_ENCRYPT_v2('text','F3229A0B371ED2D9441B830D21A390C3'));" + exception "session variable block_encryption_mode is invalid with sm4" + } - qt_sql "SELECT MD5(\"abcd\");" - qt_sql "SELECT MD5SUM(\"ab\",\"cd\");" + sql "set block_encryption_mode=\"AES_256_ECB\";" + qt_sql "SELECT TO_BASE64(AES_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3'));" // 'wr2JEDVXzL9+2XtRhgIloA==' + qt_sql "SELECT TO_BASE64(AES_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789'));" // 'BO2vxHeUcw5BQQalSBbo1w==' + qt_sql "SELECT AES_DECRYPT(FROM_BASE64('wr2JEDVXzL9+2XtRhgIloA=='),'F3229A0B371ED2D9441B830D21A390C3');" // text + qt_sql "SELECT AES_DECRYPT(FROM_BASE64('BO2vxHeUcw5BQQalSBbo1w=='),'F3229A0B371ED2D9441B830D21A390C3');" // NULL + qt_sql "SELECT AES_DECRYPT(FROM_BASE64('BO2vxHeUcw5BQQalSBbo1w=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" // text - sql "set block_encryption_mode=\"SM4_128_CBC\";" - qt_sql "SELECT TO_BASE64(SM4_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3'));" - qt_sql "SELECT TO_BASE64(SM4_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789'));" - qt_sql "SELECT SM4_DECRYPT(FROM_BASE64('aDjwRflBrDjhBZIOFNw3Tg=='),'F3229A0B371ED2D9441B830D21A390C3');" - qt_sql "SELECT SM4_DECRYPT(FROM_BASE64('G7yqOKfEyxdagboz6Qf01A=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" - - qt_sql "SELECT SM3(\"abc\");" - qt_sql "select sm3(\"abcd\");" - qt_sql "select sm3sum(\"ab\",\"cd\");" - - sql 'set enable_nereids_planner=true' - sql 'set enable_fallback_to_original_planner=false' + sql "set block_encryption_mode=\"AES_256_ECB\";" + qt_sql "SELECT TO_BASE64(AES_ENCRYPT_v2('text','F3229A0B371ED2D9441B830D21A390C3'));" // 'BO2vxHeUcw5BQQalSBbo1w==' + qt_sql "SELECT TO_BASE64(AES_ENCRYPT_v2('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789'));" // 'BO2vxHeUcw5BQQalSBbo1w==' + qt_sql "SELECT AES_DECRYPT_v2(FROM_BASE64('wr2JEDVXzL9+2XtRhgIloA=='),'F3229A0B371ED2D9441B830D21A390C3');" // NULL + qt_sql "SELECT AES_DECRYPT_v2(FROM_BASE64('BO2vxHeUcw5BQQalSBbo1w=='),'F3229A0B371ED2D9441B830D21A390C3');" // text + qt_sql "SELECT AES_DECRYPT_v2(FROM_BASE64('BO2vxHeUcw5BQQalSBbo1w=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" // text sql "set block_encryption_mode=\"AES_256_CBC\";" - qt_sql "SELECT TO_BASE64(AES_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3'));" - qt_sql "SELECT TO_BASE64(AES_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789'));" - qt_sql "SELECT AES_DECRYPT(FROM_BASE64('wr2JEDVXzL9+2XtRhgIloA=='),'F3229A0B371ED2D9441B830D21A390C3');" - qt_sql "SELECT AES_DECRYPT(FROM_BASE64('mvZT1KJw7N0RJf27aipUpg=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" + qt_sql "SELECT TO_BASE64(AES_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3'));" // 'wr2JEDVXzL9+2XtRhgIloA==' + qt_sql "SELECT TO_BASE64(AES_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789'));" // tsmK1HzbpnEdR2//WhO+MA== + qt_sql "SELECT TO_BASE64(AES_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789ff'));" // ciacXDLHMNG7CD9Kws8png== + qt_sql "SELECT AES_DECRYPT(FROM_BASE64('wr2JEDVXzL9+2XtRhgIloA=='),'F3229A0B371ED2D9441B830D21A390C3');" // text + qt_sql "SELECT AES_DECRYPT(FROM_BASE64('mvZT1KJw7N0RJf27aipUpg=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" // NULL + qt_sql "SELECT AES_DECRYPT(FROM_BASE64('tsmK1HzbpnEdR2//WhO+MA=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" // text + qt_sql "SELECT AES_DECRYPT(FROM_BASE64('ciacXDLHMNG7CD9Kws8png=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789ff');" // text explain { sql "SELECT AES_DECRYPT(UNHEX(r_2_3.`name`), 'namePnhe3E0MWyfZivUnVzDy12caymnrKp', '0123456789') AS x0 FROM dwd_candidates AS r_2_3\n" + "GROUP BY x0;" } + sql "set block_encryption_mode=\"AES_256_CBC\";" + test { + sql "SELECT TO_BASE64(AES_ENCRYPT_v2('text','F3229A0B371ED2D9441B830D21A390C3'));" + exception "Incorrect parameter count in the call to native function 'aes_encrypt'" + } + qt_sql "SELECT TO_BASE64(AES_ENCRYPT_v2('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789'));" // tsmK1HzbpnEdR2//WhO+MA== + qt_sql "SELECT TO_BASE64(AES_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789ff'));" // ciacXDLHMNG7CD9Kws8png== + test { + sql "SELECT AES_DECRYPT_v2(FROM_BASE64('wr2JEDVXzL9+2XtRhgIloA=='),'F3229A0B371ED2D9441B830D21A390C3');" + exception "Incorrect parameter count in the call to native function 'aes_decrypt'" + } + qt_sql "SELECT AES_DECRYPT(FROM_BASE64('mvZT1KJw7N0RJf27aipUpg=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" // NULL + qt_sql "SELECT AES_DECRYPT_v2(FROM_BASE64('mvZT1KJw7N0RJf27aipUpg=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" // NULL + qt_sql "SELECT AES_DECRYPT_v2(FROM_BASE64('tsmK1HzbpnEdR2//WhO+MA=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" // text + qt_sql "SELECT AES_DECRYPT_v2(FROM_BASE64('ciacXDLHMNG7CD9Kws8png=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789ff');" // text + explain { + sql "SELECT AES_DECRYPT_v2(UNHEX(r_2_3.`name`), 'namePnhe3E0MWyfZivUnVzDy12caymnrKp', '0123456789') AS x0 FROM dwd_candidates AS r_2_3\n" + + "GROUP BY x0;" + } + sql "set block_encryption_mode=\"SM4_128_CBC\";" - qt_sql "SELECT TO_BASE64(SM4_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3'));" - qt_sql "SELECT TO_BASE64(SM4_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789'));" - qt_sql "SELECT SM4_DECRYPT(FROM_BASE64('aDjwRflBrDjhBZIOFNw3Tg=='),'F3229A0B371ED2D9441B830D21A390C3');" - qt_sql "SELECT SM4_DECRYPT(FROM_BASE64('G7yqOKfEyxdagboz6Qf01A=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" + qt_sql "SELECT TO_BASE64(SM4_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3'));" // 'wr2JEDVXzL9+2XtRhgIloA==' + qt_sql "SELECT TO_BASE64(SM4_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789'));" // 1Y4NGIukSbv9OrkZnRD1bQ== + qt_sql "SELECT TO_BASE64(SM4_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789ff'));" // G5POcFAJwiZHeTtN6DjInQ== + qt_sql "SELECT SM4_DECRYPT(FROM_BASE64('wr2JEDVXzL9+2XtRhgIloA=='),'F3229A0B371ED2D9441B830D21A390C3');" // text + qt_sql "SELECT SM4_DECRYPT(FROM_BASE64('1Y4NGIukSbv9OrkZnRD1bQ=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" // text + qt_sql "SELECT SM4_DECRYPT(FROM_BASE64('G5POcFAJwiZHeTtN6DjInQ=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" // NULL + qt_sql "SELECT SM4_DECRYPT(FROM_BASE64('G5POcFAJwiZHeTtN6DjInQ=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789ff');" // text + test { + sql "SELECT TO_BASE64(AES_ENCRYPT('text','F3229A0B371ED2D9441B830D21A390C3'));" + exception "session variable block_encryption_mode is invalid with aes" + } + + sql "set block_encryption_mode=\"SM4_128_CBC\";" + test { + sql "SELECT TO_BASE64(SM4_ENCRYPT_v2('text','F3229A0B371ED2D9441B830D21A390C3'));" + exception "Incorrect parameter count in the call to native function 'sm4_encrypt'" + } + qt_sql "SELECT TO_BASE64(SM4_ENCRYPT_v2('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789'));" // 1Y4NGIukSbv9OrkZnRD1bQ== + qt_sql "SELECT TO_BASE64(SM4_ENCRYPT_v2('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789ff'));" // G5POcFAJwiZHeTtN6DjInQ== + test { + sql "SELECT SM4_DECRYPT_v2(FROM_BASE64('aDjwRflBrDjhBZIOFNw3Tg=='),'F3229A0B371ED2D9441B830D21A390C3');" + exception "Incorrect parameter count in the call to native function 'sm4_decrypt'" + } + qt_sql "SELECT SM4_DECRYPT_v2(FROM_BASE64('1Y4NGIukSbv9OrkZnRD1bQ=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" // text + qt_sql "SELECT SM4_DECRYPT_v2(FROM_BASE64('G5POcFAJwiZHeTtN6DjInQ=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');" // NULL + qt_sql "SELECT SM4_DECRYPT_v2(FROM_BASE64('G5POcFAJwiZHeTtN6DjInQ=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789ff');" // text + test { + sql "SELECT TO_BASE64(AES_ENCRYPT_v2('text','F3229A0B371ED2D9441B830D21A390C3'));" + exception "session variable block_encryption_mode is invalid with aes" + } qt_sql "SELECT SM3(\"abc\");" qt_sql "select sm3(\"abcd\");" --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org