@@ -44,6 +44,9 @@ extern "C" {
4444
4545ARROW_SUPPRESS_MISSING_DECLARATIONS_WARNING
4646
47+ // AES operates on 16 byte blocks for every supported key length.
48+ static constexpr int64_t kAesBlockSize = 16 ;
49+
4750static char mask_array[256 ] = {
4851 (char )0 , (char )1 , (char )2 , (char )3 , (char )4 , (char )5 , (char )6 , (char )7 ,
4952 (char )8 , (char )9 , (char )10 , (char )11 , (char )12 , (char )13 , (char )14 , (char )15 ,
@@ -361,19 +364,16 @@ const char* gdv_fn_aes_encrypt(int64_t context, const char* data, int32_t data_l
361364 return " " ;
362365 }
363366
364- int64_t kAesBlockSize = 0 ;
365- if (key_data_len == 16 || key_data_len == 24 || key_data_len == 32 ) {
366- kAesBlockSize = static_cast <int64_t >(key_data_len);
367- } else {
367+ if (key_data_len != 16 && key_data_len != 24 && key_data_len != 32 ) {
368368 std::ostringstream oss;
369369 oss << " invalid key length: " << key_data_len;
370370 gdv_fn_context_set_error_msg (context, oss.str ().c_str ());
371371 *out_len = 0 ;
372372 return nullptr ;
373373 }
374374
375- *out_len =
376- static_cast < int32_t >( arrow::bit_util::RoundUpToPowerOf2 (data_len, kAesBlockSize ));
375+ *out_len = static_cast < int32_t >(
376+ arrow::bit_util::RoundUpToPowerOf2 (data_len, kAesBlockSize ) + kAesBlockSize );
377377 char * ret = reinterpret_cast <char *>(gdv_fn_context_arena_malloc (context, *out_len));
378378 if (ret == nullptr ) {
379379 std::string err_msg = " AES_ENCRYPT: could not allocate memory for ciphertext output" ;
@@ -407,19 +407,16 @@ const char* gdv_fn_aes_decrypt(int64_t context, const char* data, int32_t data_l
407407 return " " ;
408408 }
409409
410- int64_t kAesBlockSize = 0 ;
411- if (key_data_len == 16 || key_data_len == 24 || key_data_len == 32 ) {
412- kAesBlockSize = static_cast <int64_t >(key_data_len);
413- } else {
410+ if (key_data_len != 16 && key_data_len != 24 && key_data_len != 32 ) {
414411 std::ostringstream oss;
415412 oss << " invalid key length: " << key_data_len;
416413 gdv_fn_context_set_error_msg (context, oss.str ().c_str ());
417414 *out_len = 0 ;
418415 return nullptr ;
419416 }
420417
421- *out_len =
422- static_cast < int32_t >( arrow::bit_util::RoundUpToPowerOf2 (data_len, kAesBlockSize ));
418+ *out_len = static_cast < int32_t >(
419+ arrow::bit_util::RoundUpToPowerOf2 (data_len, kAesBlockSize ) + kAesBlockSize );
423420 char * ret = reinterpret_cast <char *>(gdv_fn_context_arena_malloc (context, *out_len));
424421 if (ret == nullptr ) {
425422 std::string err_msg = " Could not allocate memory for returning aes decrypt plaintext" ;
0 commit comments