2018-10-28 02:18:32 +01:00
|
|
|
#include "CryPresetPasswordBasedKeyProvider.h"
|
|
|
|
|
|
|
|
using cpputils::unique_ref;
|
|
|
|
using cpputils::EncryptionKey;
|
|
|
|
using cpputils::unique_ref;
|
|
|
|
using cpputils::PasswordBasedKDF;
|
|
|
|
using cpputils::Data;
|
|
|
|
|
|
|
|
namespace cryfs {
|
|
|
|
|
2022-06-29 13:27:33 +02:00
|
|
|
CryPresetPasswordBasedKeyProvider::CryPresetPasswordBasedKeyProvider(std::string password, unique_ref<PasswordBasedKDF> kdf, SizedData* returnedHash)
|
|
|
|
: _password(std::move(password)), _kdf(std::move(kdf)), _returnedHash(returnedHash) {}
|
2018-10-28 02:18:32 +01:00
|
|
|
|
2022-06-29 19:16:45 +02:00
|
|
|
void CryPresetPasswordBasedKeyProvider::saveEncryptionKey(EncryptionKey encryptionKey) {
|
2022-06-29 13:27:33 +02:00
|
|
|
if (_returnedHash != nullptr) {
|
|
|
|
_returnedHash->size = encryptionKey.binaryLength();
|
2022-06-29 19:16:45 +02:00
|
|
|
_returnedHash->data = new unsigned char[_returnedHash->size];
|
|
|
|
memcpy(_returnedHash->data, encryptionKey.data(), _returnedHash->size);
|
2022-06-29 13:27:33 +02:00
|
|
|
}
|
2022-06-29 19:16:45 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
EncryptionKey CryPresetPasswordBasedKeyProvider::requestKeyForExistingFilesystem(size_t keySize, const Data& kdfParameters) {
|
|
|
|
EncryptionKey encryptionKey = _kdf->deriveExistingKey(keySize, _password, kdfParameters);
|
|
|
|
saveEncryptionKey(encryptionKey);
|
2022-06-29 13:27:33 +02:00
|
|
|
return encryptionKey;
|
2018-10-28 02:18:32 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
CryPresetPasswordBasedKeyProvider::KeyResult CryPresetPasswordBasedKeyProvider::requestKeyForNewFilesystem(size_t keySize) {
|
|
|
|
auto keyResult = _kdf->deriveNewKey(keySize, _password);
|
2022-06-29 19:16:45 +02:00
|
|
|
saveEncryptionKey(keyResult.key);
|
2018-10-28 02:18:32 +01:00
|
|
|
return {std::move(keyResult.key), std::move(keyResult.kdfParameters)};
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|