@@ -19,7 +19,8 @@ EncryptionKey::EncryptionKey(data_ptr_t encryption_key_p) {
1919 D_ASSERT (memcmp (key, encryption_key_p, MainHeader::DEFAULT_ENCRYPTION_KEY_LENGTH) == 0 );
2020
2121 // zero out the encryption key in memory
22- memset (encryption_key_p, 0 , MainHeader::DEFAULT_ENCRYPTION_KEY_LENGTH);
22+ duckdb_mbedtls::MbedTlsWrapper::AESStateMBEDTLS::SecureClearData (encryption_key_p,
23+ MainHeader::DEFAULT_ENCRYPTION_KEY_LENGTH);
2324 LockEncryptionKey (key);
2425}
2526
@@ -37,7 +38,7 @@ void EncryptionKey::LockEncryptionKey(data_ptr_t key, idx_t key_len) {
3738}
3839
3940void EncryptionKey::UnlockEncryptionKey (data_ptr_t key, idx_t key_len) {
40- memset (key, 0 , key_len);
41+ duckdb_mbedtls::MbedTlsWrapper::AESStateMBEDTLS::SecureClearData (key, key_len);
4142#if defined(_WIN32)
4243 VirtualUnlock (key, key_len);
4344#else
@@ -64,15 +65,16 @@ EncryptionKeyManager &EncryptionKeyManager::Get(DatabaseInstance &db) {
6465
6566string EncryptionKeyManager::GenerateRandomKeyID () {
6667 uint8_t key_id[KEY_ID_BYTES];
67- duckdb_mbedtls::MbedTlsWrapper::AESStateMBEDTLS::GenerateRandomDataStatic (key_id, KEY_ID_BYTES);
68+ RandomEngine engine;
69+ engine.RandomData (key_id, KEY_ID_BYTES);
6870 string key_id_str (reinterpret_cast <const char *>(key_id), KEY_ID_BYTES);
6971 return key_id_str;
7072}
7173
7274void EncryptionKeyManager::AddKey (const string &key_name, data_ptr_t key) {
7375 derived_keys.emplace (key_name, EncryptionKey (key));
7476 // Zero-out the encryption key
75- std::memset (key, 0 , DERIVED_KEY_LENGTH);
77+ duckdb_mbedtls::MbedTlsWrapper::AESStateMBEDTLS::SecureClearData (key, DERIVED_KEY_LENGTH);
7678}
7779
7880bool EncryptionKeyManager::HasKey (const string &key_name) const {
@@ -107,7 +109,7 @@ string EncryptionKeyManager::Base64Decode(const string &key) {
107109 auto output = duckdb::unique_ptr<unsigned char []>(new unsigned char [result_size]);
108110 Blob::FromBase64 (key, output.get (), result_size);
109111 string decoded_key (reinterpret_cast <const char *>(output.get ()), result_size);
110- memset (output.get (), 0 , result_size);
112+ duckdb_mbedtls::MbedTlsWrapper::AESStateMBEDTLS::SecureClearData (output.get (), result_size);
111113 return decoded_key;
112114}
113115
@@ -124,10 +126,9 @@ void EncryptionKeyManager::DeriveKey(string &user_key, data_ptr_t salt, data_ptr
124126
125127 KeyDerivationFunctionSHA256 (reinterpret_cast <const_data_ptr_t >(decoded_key.data ()), decoded_key.size (), salt,
126128 derived_key);
127-
128- // wipe the original and decoded key
129- std::fill (user_key.begin (), user_key.end (), 0 );
130- std::fill (decoded_key.begin (), decoded_key.end (), 0 );
129+ duckdb_mbedtls::MbedTlsWrapper::AESStateMBEDTLS::SecureClearData (data_ptr_cast (&user_key[0 ]), user_key.size ());
130+ duckdb_mbedtls::MbedTlsWrapper::AESStateMBEDTLS::SecureClearData (data_ptr_cast (&decoded_key[0 ]),
131+ decoded_key.size ());
131132 user_key.clear ();
132133 decoded_key.clear ();
133134}
0 commit comments