| 51 | } |
| 52 | |
| 53 | SecureString DecryptKeyLocally(const std::string& encoded_encrypted_key, |
| 54 | const SecureString& master_key, const std::string& aad) { |
| 55 | std::string encrypted_key = ::arrow::util::base64_decode(encoded_encrypted_key); |
| 56 | |
| 57 | AesDecryptor key_decryptor(ParquetCipher::AES_GCM_V1, |
| 58 | static_cast<int>(master_key.size()), false, |
| 59 | false /*contains_length*/); |
| 60 | |
| 61 | int32_t decrypted_key_len = |
| 62 | key_decryptor.PlaintextLength(static_cast<int>(encrypted_key.size())); |
| 63 | SecureString decrypted_key(decrypted_key_len, '\0'); |
| 64 | |
| 65 | decrypted_key_len = key_decryptor.Decrypt(str2span(encrypted_key), master_key.as_span(), |
| 66 | str2span(aad), decrypted_key.as_span()); |
| 67 | |
| 68 | return decrypted_key; |
| 69 | } |
| 70 | |
| 71 | bool ValidateKeyLength(int32_t key_length_bits) { |
| 72 | int32_t* found_key_length = std::find( |