Binlog: store key_salt in string instead of BufferSlice.

This commit is contained in:
levlam 2023-02-01 23:46:54 +03:00
parent b4658f3da3
commit 3d6ea2f779
2 changed files with 14 additions and 16 deletions

View File

@ -51,7 +51,7 @@ struct AesCtrEncryptionEvent {
return 2;
}
BufferSlice key_salt_;
string key_salt_;
BufferSlice iv_;
BufferSlice key_hash_;
@ -62,7 +62,7 @@ struct AesCtrEncryptionEvent {
if (db_key.is_raw_key()) {
iteration_count = kdf_fast_iteration_count();
}
pbkdf2_sha256(db_key.data(), key_salt_.as_slice(), narrow_cast<int>(iteration_count), key.as_slice());
pbkdf2_sha256(db_key.data(), key_salt_, narrow_cast<int>(iteration_count), key.as_slice());
return key;
}
@ -216,7 +216,7 @@ Status Binlog::init(string path, const Callback &callback, DbKey db_key, DbKey o
}
if ((!db_key_.is_empty() && !db_key_used_) || (db_key_.is_empty() && encryption_type_ != EncryptionType::None)) {
aes_ctr_key_salt_ = BufferSlice();
aes_ctr_key_salt_ = string();
do_reindex();
}
@ -304,7 +304,7 @@ void Binlog::close(Promise<> promise) {
void Binlog::change_key(DbKey new_db_key) {
db_key_ = std::move(new_db_key);
aes_ctr_key_salt_ = BufferSlice();
aes_ctr_key_salt_ = string();
do_reindex();
}
@ -333,14 +333,12 @@ void Binlog::do_event(BinlogEvent &&event) {
VLOG(binlog) << "Write binlog event: " << format::cond(state_ == State::Reindex, "[reindex] ")
<< event.public_to_string();
switch (encryption_type_) {
case EncryptionType::None: {
case EncryptionType::None:
buffer_writer_.append(event.raw_event_.clone());
break;
}
case EncryptionType::AesCtr: {
case EncryptionType::AesCtr:
buffer_writer_.append(event.raw_event_.as_slice());
break;
}
}
}
@ -350,7 +348,7 @@ void Binlog::do_event(BinlogEvent &&event) {
encryption_event.parse(TlParser(event.data_));
BufferSlice key;
if (aes_ctr_key_salt_.as_slice() == encryption_event.key_salt_.as_slice()) {
if (aes_ctr_key_salt_ == encryption_event.key_salt_) {
key = BufferSlice(as_slice(aes_ctr_key_));
} else if (!db_key_.is_empty()) {
key = encryption_event.generate_key(db_key_);
@ -374,7 +372,7 @@ void Binlog::do_event(BinlogEvent &&event) {
encryption_type_ = EncryptionType::AesCtr;
aes_ctr_key_salt_ = encryption_event.key_salt_.copy();
aes_ctr_key_salt_ = encryption_event.key_salt_;
update_encryption(key.as_slice(), encryption_event.iv_.as_slice());
if (state_ == State::Load) {
@ -599,16 +597,16 @@ void Binlog::reset_encryption() {
EncryptionEvent event;
if (aes_ctr_key_salt_.empty()) {
event.key_salt_ = BufferSlice(EncryptionEvent::default_salt_size());
Random::secure_bytes(event.key_salt_.as_slice());
event.key_salt_.resize(EncryptionEvent::default_salt_size());
Random::secure_bytes(event.key_salt_);
} else {
event.key_salt_ = aes_ctr_key_salt_.clone();
event.key_salt_ = aes_ctr_key_salt_;
}
event.iv_ = BufferSlice(EncryptionEvent::iv_size());
Random::secure_bytes(event.iv_.as_slice());
BufferSlice key;
if (aes_ctr_key_salt_.as_slice() == event.key_salt_.as_slice()) {
if (aes_ctr_key_salt_ == event.key_salt_) {
key = BufferSlice(as_slice(aes_ctr_key_));
} else {
key = event.generate_key(db_key_);

View File

@ -132,7 +132,7 @@ class Binlog {
enum class EncryptionType { None, AesCtr } encryption_type_ = EncryptionType::None;
// AesCtrEncryption
BufferSlice aes_ctr_key_salt_;
string aes_ctr_key_salt_;
UInt256 aes_ctr_key_;
AesCtrState aes_ctr_state_;
@ -144,7 +144,7 @@ class Binlog {
int64 fd_size_{0};
uint64 fd_events_{0};
string path_;
std::vector<BinlogEvent> pending_events_;
vector<BinlogEvent> pending_events_;
unique_ptr<detail::BinlogEventsProcessor> processor_;
unique_ptr<detail::BinlogEventsBuffer> events_buffer_;
bool in_flush_events_buffer_{false};