diff --git a/benchmark/bench_crypto.cpp b/benchmark/bench_crypto.cpp index f118c3a45..7e019a5a1 100644 --- a/benchmark/bench_crypto.cpp +++ b/benchmark/bench_crypto.cpp @@ -306,14 +306,14 @@ class AesCbcDecryptBench final : public td::Benchmark { void start_up() final { std::fill(std::begin(data), std::end(data), static_cast(123)); - td::Random::secure_bytes(as_slice(key)); - td::Random::secure_bytes(as_slice(iv)); + td::Random::secure_bytes(as_mutable_slice(key)); + td::Random::secure_bytes(as_mutable_slice(iv)); } void run(int n) final { td::MutableSlice data_slice(data, DATA_SIZE); for (int i = 0; i < n; i++) { - td::aes_cbc_decrypt(as_slice(key), as_slice(iv), data_slice, data_slice); + td::aes_cbc_decrypt(as_slice(key), as_mutable_slice(iv), data_slice, data_slice); } } }; @@ -330,14 +330,14 @@ class AesCbcEncryptBench final : public td::Benchmark { void start_up() final { std::fill(std::begin(data), std::end(data), static_cast(123)); - td::Random::secure_bytes(as_slice(key)); - td::Random::secure_bytes(as_slice(iv)); + td::Random::secure_bytes(as_mutable_slice(key)); + td::Random::secure_bytes(as_mutable_slice(iv)); } void run(int n) final { td::MutableSlice data_slice(data, DATA_SIZE); for (int i = 0; i < n; i++) { - td::aes_cbc_encrypt(as_slice(key), as_slice(iv), data_slice, data_slice); + td::aes_cbc_encrypt(as_slice(key), as_mutable_slice(iv), data_slice, data_slice); } } }; @@ -355,8 +355,8 @@ class AesIgeShortBench final : public td::Benchmark { void start_up() final { std::fill(std::begin(data), std::end(data), static_cast(123)); - td::Random::secure_bytes(as_slice(key)); - td::Random::secure_bytes(as_slice(iv)); + td::Random::secure_bytes(as_mutable_slice(key)); + td::Random::secure_bytes(as_mutable_slice(iv)); } void run(int n) final { @@ -367,7 +367,7 @@ class AesIgeShortBench final : public td::Benchmark { ige.init(as_slice(key), as_slice(iv), false); ige.decrypt(data_slice, data_slice); } else { - td::aes_ige_decrypt(as_slice(key), as_slice(iv), data_slice, data_slice); + td::aes_ige_decrypt(as_slice(key), as_mutable_slice(iv), data_slice, data_slice); } } } diff --git a/td/mtproto/Handshake.cpp b/td/mtproto/Handshake.cpp index 43fdc3969..ebf38b2eb 100644 --- a/td/mtproto/Handshake.cpp +++ b/td/mtproto/Handshake.cpp @@ -185,7 +185,7 @@ Status AuthKeyHandshake::on_server_dh_params(Slice message, Callback *connection auto save_tmp_aes_iv = tmp_aes_iv; // encrypted_answer := AES256_ige_encrypt (answer_with_hash, tmp_aes_key, tmp_aes_iv); MutableSlice answer(const_cast(dh_params->encrypted_answer_.begin()), dh_params->encrypted_answer_.size()); - aes_ige_decrypt(as_slice(tmp_aes_key), as_slice(tmp_aes_iv), answer, answer); + aes_ige_decrypt(as_slice(tmp_aes_key), as_mutable_slice(tmp_aes_iv), answer, answer); tmp_aes_iv = save_tmp_aes_iv; // answer_with_hash := SHA1(answer) + answer + (0-15 random bytes) @@ -238,7 +238,7 @@ Status AuthKeyHandshake::on_server_dh_params(Slice message, Callback *connection Random::secure_bytes(encrypted_data.ubegin() + encrypted_data_size, encrypted_data_size_with_pad - encrypted_data_size); tmp_KDF(server_nonce_, new_nonce_, &tmp_aes_key, &tmp_aes_iv); - aes_ige_encrypt(as_slice(tmp_aes_key), as_slice(tmp_aes_iv), encrypted_data, encrypted_data); + aes_ige_encrypt(as_slice(tmp_aes_key), as_mutable_slice(tmp_aes_iv), encrypted_data, encrypted_data); mtproto_api::set_client_DH_params set_client_dh_params(nonce_, server_nonce_, encrypted_data); send(connection, create_storer(set_client_dh_params)); @@ -289,7 +289,7 @@ Status AuthKeyHandshake::on_dh_gen_response(Slice message, Callback *connection) void AuthKeyHandshake::send(Callback *connection, const Storer &storer) { auto size = storer.size(); auto writer = BufferWriter{size, 0, 0}; - auto real_size = storer.store(writer.as_slice().ubegin()); + auto real_size = storer.store(writer.as_mutable_slice().ubegin()); CHECK(real_size == size); last_query_ = writer.as_buffer_slice(); return do_send(connection, create_storer(last_query_.as_slice())); diff --git a/td/mtproto/RawConnection.cpp b/td/mtproto/RawConnection.cpp index 4e8d1f549..a86ba8159 100644 --- a/td/mtproto/RawConnection.cpp +++ b/td/mtproto/RawConnection.cpp @@ -65,7 +65,7 @@ class RawConnectionDefault final : public RawConnection { auto packet = BufferWriter{Transport::write(storer, auth_key, &info), transport_->max_prepend_size(), transport_->max_append_size()}; - Transport::write(storer, auth_key, &info, packet.as_slice()); + Transport::write(storer, auth_key, &info, packet.as_mutable_slice()); bool use_quick_ack = false; if (quick_ack_token != 0 && transport_->support_quick_ack()) { @@ -89,7 +89,7 @@ class RawConnectionDefault final : public RawConnection { info.no_crypto_flag = true; auto packet = BufferWriter{Transport::write(storer, AuthKey(), &info), transport_->max_prepend_size(), transport_->max_append_size()}; - Transport::write(storer, AuthKey(), &info, packet.as_slice()); + Transport::write(storer, AuthKey(), &info, packet.as_mutable_slice()); LOG(INFO) << "Send handshake packet: " << format::as_hex_dump<4>(packet.as_slice()); transport_->write(std::move(packet), false); return info.message_id; @@ -156,7 +156,7 @@ class RawConnectionDefault final : public RawConnection { TRY_RESULT(wait_size, transport_->read_next(&packet, &quick_ack)); if (!is_aligned_pointer<4>(packet.as_slice().ubegin())) { BufferSlice new_packet(packet.size()); - new_packet.as_slice().copy_from(packet.as_slice()); + new_packet.as_mutable_slice().copy_from(packet.as_slice()); packet = std::move(new_packet); } LOG_CHECK(is_aligned_pointer<4>(packet.as_slice().ubegin())) @@ -177,7 +177,7 @@ class RawConnectionDefault final : public RawConnection { PacketInfo info; info.version = 2; - TRY_RESULT(read_result, Transport::read(packet.as_slice(), auth_key, &info)); + TRY_RESULT(read_result, Transport::read(packet.as_mutable_slice(), auth_key, &info)); switch (read_result.type()) { case Transport::ReadResult::Quickack: { TRY_STATUS(on_quick_ack(read_result.quick_ack(), callback)); @@ -389,7 +389,7 @@ class RawConnectionHttp final : public RawConnection { PacketInfo info; info.version = 2; - TRY_RESULT(read_result, Transport::read(packet.as_slice(), auth_key, &info)); + TRY_RESULT(read_result, Transport::read(packet.as_mutable_slice(), auth_key, &info)); switch (read_result.type()) { case Transport::ReadResult::Quickack: { break; diff --git a/td/mtproto/SessionConnection.cpp b/td/mtproto/SessionConnection.cpp index 3ea234c73..e02d80f74 100644 --- a/td/mtproto/SessionConnection.cpp +++ b/td/mtproto/SessionConnection.cpp @@ -818,7 +818,7 @@ std::pair SessionConnection::encrypted_bind(int64 perm_key, auto object_storer = create_storer(object); auto size = object_storer.size(); auto object_packet = BufferWriter{size, 0, 0}; - auto real_size = object_storer.store(object_packet.as_slice().ubegin()); + auto real_size = object_storer.store(object_packet.as_mutable_slice().ubegin()); CHECK(size == real_size); MtprotoQuery query{ @@ -833,7 +833,7 @@ std::pair SessionConnection::encrypted_bind(int64 perm_key, const AuthKey &main_auth_key = auth_data_->get_main_auth_key(); auto packet = BufferWriter{Transport::write(query_storer, main_auth_key, &info), 0, 0}; - Transport::write(query_storer, main_auth_key, &info, packet.as_slice()); + Transport::write(query_storer, main_auth_key, &info, packet.as_mutable_slice()); return std::make_pair(query.message_id, packet.as_buffer_slice()); } diff --git a/td/mtproto/TcpTransport.cpp b/td/mtproto/TcpTransport.cpp index d4da59a5b..c10ad1dfd 100644 --- a/td/mtproto/TcpTransport.cpp +++ b/td/mtproto/TcpTransport.cpp @@ -69,7 +69,7 @@ void IntermediateTransport::write_prepare_inplace(BufferWriter *message, bool qu message->confirm_append(append.size()); } - as(message->as_slice().begin()) = static_cast(size + append_size); + as(message->as_mutable_slice().begin()) = static_cast(size + append_size); } void IntermediateTransport::init_output_stream(ChainBufferWriter *stream) { @@ -121,7 +121,7 @@ void ObfuscatedTransport::init(ChainBufferReader *input, ChainBufferWriter *outp state.init(); state.feed(as_slice(key)); state.feed(proxy_secret); - state.extract(as_slice(key)); + state.extract(as_mutable_slice(key)); } }; fix_key(key); @@ -153,7 +153,7 @@ Result ObfuscatedTransport::read_next(BufferSlice *message, uint32 *quic void ObfuscatedTransport::write(BufferWriter &&message, bool quick_ack) { impl_.write_prepare_inplace(&message, quick_ack); - output_state_.encrypt(message.as_slice(), message.as_slice()); + output_state_.encrypt(message.as_slice(), message.as_mutable_slice()); if (secret_.emulate_tls()) { do_write_tls(std::move(message)); } else { diff --git a/td/mtproto/TlsInit.cpp b/td/mtproto/TlsInit.cpp index b5b181a33..c166ae02b 100644 --- a/td/mtproto/TlsInit.cpp +++ b/td/mtproto/TlsInit.cpp @@ -490,7 +490,7 @@ Status TlsInit::wait_hello_response() { } auto response = fd_.input_buffer().cut_head(it.begin().clone()).move_as_buffer_slice(); - auto response_rand_slice = response.as_slice().substr(11, 32); + auto response_rand_slice = response.as_mutable_slice().substr(11, 32); auto response_rand = response_rand_slice.str(); std::fill(response_rand_slice.begin(), response_rand_slice.end(), '\0'); std::string hash_dest(32, '\0'); diff --git a/td/mtproto/Transport.cpp b/td/mtproto/Transport.cpp index 9f1fba133..72f32fe9f 100644 --- a/td/mtproto/Transport.cpp +++ b/td/mtproto/Transport.cpp @@ -158,7 +158,7 @@ std::pair Transport::calc_message_key2(const AuthKey &auth_key, // msg_key = substr (msg_key_large, 8, 16); UInt128 res; - as_slice(res).copy_from(msg_key_large.substr(8, 16)); + as_mutable_slice(res).copy_from(msg_key_large.substr(8, 16)); return std::make_pair(as(msg_key_large_raw) | (1u << 31), res); } @@ -243,7 +243,7 @@ Status Transport::read_crypto_impl(int X, MutableSlice message, const AuthKey &a KDF2(auth_key.key(), header->message_key, X, &aes_key, &aes_iv); } - aes_ige_decrypt(as_slice(aes_key), as_slice(aes_iv), to_decrypt, to_decrypt); + aes_ige_decrypt(as_slice(aes_key), as_mutable_slice(aes_iv), to_decrypt, to_decrypt); size_t tail_size = message.end() - reinterpret_cast(header->data); if (tail_size < sizeof(PrefixT)) { @@ -378,7 +378,7 @@ void Transport::write_crypto_impl(int X, const Storer &storer, const AuthKey &au KDF2(auth_key.key(), header->message_key, X, &aes_key, &aes_iv); } - aes_ige_encrypt(as_slice(aes_key), as_slice(aes_iv), to_encrypt, to_encrypt); + aes_ige_encrypt(as_slice(aes_key), as_mutable_slice(aes_iv), to_encrypt, to_encrypt); } size_t Transport::write_crypto(const Storer &storer, const AuthKey &auth_key, PacketInfo *info, MutableSlice dest) { diff --git a/td/telegram/ConfigManager.cpp b/td/telegram/ConfigManager.cpp index 4490a0f1f..2a6d5d061 100644 --- a/td/telegram/ConfigManager.cpp +++ b/td/telegram/ConfigManager.cpp @@ -181,9 +181,9 @@ Result decode_config(Slice input) { MutableSlice data_cbc = data_rsa_slice.substr(32); UInt256 key; UInt128 iv; - as_slice(key).copy_from(data_rsa_slice.substr(0, 32)); - as_slice(iv).copy_from(data_rsa_slice.substr(16, 16)); - aes_cbc_decrypt(as_slice(key), as_slice(iv), data_cbc, data_cbc); + as_mutable_slice(key).copy_from(data_rsa_slice.substr(0, 32)); + as_mutable_slice(iv).copy_from(data_rsa_slice.substr(16, 16)); + aes_cbc_decrypt(as_slice(key), as_mutable_slice(iv), data_cbc, data_cbc); CHECK(data_cbc.size() == 224); string hash(32, ' '); diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 8c111f19b..234ebc510 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -6273,7 +6273,7 @@ BufferSlice MessagesManager::get_dialog_database_value(const Dialog *d) { store(*d, storer_calc_length); BufferSlice value_buffer{storer_calc_length.get_length()}; - auto value = value_buffer.as_slice(); + auto value = value_buffer.as_mutable_slice(); LogEventStorerUnsafe storer_unsafe(value.ubegin()); store(*d, storer_unsafe); diff --git a/td/telegram/PasswordManager.cpp b/td/telegram/PasswordManager.cpp index 3ccbdc54b..7450738c7 100644 --- a/td/telegram/PasswordManager.cpp +++ b/td/telegram/PasswordManager.cpp @@ -44,11 +44,11 @@ static void hash_sha256(Slice data, Slice salt, MutableSlice dest) { BufferSlice PasswordManager::calc_password_hash(Slice password, Slice client_salt, Slice server_salt) { LOG(INFO) << "Begin password hash calculation"; BufferSlice buf(32); - hash_sha256(password, client_salt, buf.as_slice()); - hash_sha256(buf.as_slice(), server_salt, buf.as_slice()); + hash_sha256(password, client_salt, buf.as_mutable_slice()); + hash_sha256(buf.as_slice(), server_salt, buf.as_mutable_slice()); BufferSlice hash(64); - pbkdf2_sha512(buf.as_slice(), client_salt, 100000, hash.as_slice()); - hash_sha256(hash.as_slice(), server_salt, buf.as_slice()); + pbkdf2_sha512(buf.as_slice(), client_salt, 100000, hash.as_mutable_slice()); + hash_sha256(hash.as_slice(), server_salt, buf.as_mutable_slice()); LOG(INFO) << "End password hash calculation"; return buf; } @@ -101,7 +101,7 @@ tl_object_ptr PasswordManager::get_input_ch auto x_bn = BigNum::from_binary(x.as_slice()); BufferSlice a(2048 / 8); - Random::secure_bytes(a.as_slice()); + Random::secure_bytes(a.as_mutable_slice()); auto a_bn = BigNum::from_binary(a.as_slice()); BigNumContext ctx; @@ -636,8 +636,8 @@ void PasswordManager::update_password_settings(UpdateSettings update_settings, P static BufferSlice create_salt(Slice salt_prefix) { static constexpr size_t ADDED_SALT_SIZE = 32; BufferSlice new_salt(salt_prefix.size() + ADDED_SALT_SIZE); - new_salt.as_slice().copy_from(salt_prefix); - Random::secure_bytes(new_salt.as_slice().substr(salt_prefix.size())); + new_salt.as_mutable_slice().copy_from(salt_prefix); + Random::secure_bytes(new_salt.as_mutable_slice().substr(salt_prefix.size())); return new_salt; } diff --git a/td/telegram/SecretChatActor.cpp b/td/telegram/SecretChatActor.cpp index b1bbfc624..9db8b30ab 100644 --- a/td/telegram/SecretChatActor.cpp +++ b/td/telegram/SecretChatActor.cpp @@ -216,7 +216,7 @@ Result SecretChatActor::create_encrypted_message(int32 my_in_seq_no auto layer = current_layer(); BufferSlice random_bytes(31); - Random::secure_bytes(random_bytes.as_slice().ubegin(), random_bytes.size()); + Random::secure_bytes(random_bytes.as_mutable_slice().ubegin(), random_bytes.size()); auto message_with_layer = secret_api::make_object( std::move(random_bytes), layer, in_seq_no, out_seq_no, std::move(message)); LOG(INFO) << "Create message " << to_string(message_with_layer); @@ -227,7 +227,7 @@ Result SecretChatActor::create_encrypted_message(int32 my_in_seq_no info.version = 2; info.is_creator = auth_state_.x == 0; auto packet_writer = BufferWriter{mtproto::Transport::write(new_storer, *auth_key, &info), 0, 0}; - mtproto::Transport::write(new_storer, *auth_key, &info, packet_writer.as_slice()); + mtproto::Transport::write(new_storer, *auth_key, &info, packet_writer.as_mutable_slice()); message = std::move(message_with_layer->message_); return packet_writer.as_buffer_slice(); } @@ -770,7 +770,7 @@ void SecretChatActor::tear_down() { } Result> SecretChatActor::decrypt(BufferSlice &encrypted_message) { - MutableSlice data = encrypted_message.as_slice(); + MutableSlice data = encrypted_message.as_mutable_slice(); CHECK(is_aligned_pointer<4>(data.data())); TRY_RESULT(auth_key_id, mtproto::Transport::read_auth_key_id(data)); mtproto::AuthKey *auth_key = nullptr; @@ -789,7 +789,7 @@ Result> SecretChatActor::decrypt(BufferSl Result r_read_result; for (size_t i = 0; i < versions.size(); i++) { encrypted_message_copy = encrypted_message.copy(); - data = encrypted_message_copy.as_slice(); + data = encrypted_message_copy.as_mutable_slice(); CHECK(is_aligned_pointer<4>(data.data())); mtproto::PacketInfo info; @@ -1504,7 +1504,7 @@ Status SecretChatActor::outbound_rewrite_with_empty(uint64 state_id) { } cancel_query(state->net_query_ref); - MutableSlice data = state->message->encrypted_message.as_slice(); + Slice data = state->message->encrypted_message.as_slice(); CHECK(is_aligned_pointer<4>(data.data())); // Rewrite with delete itself diff --git a/td/telegram/SecureStorage.cpp b/td/telegram/SecureStorage.cpp index aaa19d9e0..e67a3f561 100644 --- a/td/telegram/SecureStorage.cpp +++ b/td/telegram/SecureStorage.cpp @@ -24,7 +24,7 @@ Result ValueHash::create(Slice data) { if (data.size() != ::td::as_slice(hash).size()) { return Status::Error(PSLICE() << "Wrong hash size " << data.size()); } - ::td::as_slice(hash).copy_from(data); + ::td::as_mutable_slice(hash).copy_from(data); return ValueHash{hash}; } @@ -41,17 +41,15 @@ static AesCbcState calc_aes_cbc_state_hash(Slice hash) { AesCbcState calc_aes_cbc_state_pbkdf2(Slice secret, Slice salt) { LOG(INFO) << "Begin AES CBC state calculation"; UInt<512> hash; - auto hash_slice = as_slice(hash); - pbkdf2_sha512(secret, salt, 100000, hash_slice); - return calc_aes_cbc_state_hash(hash_slice); + pbkdf2_sha512(secret, salt, 100000, as_mutable_slice(hash)); + return calc_aes_cbc_state_hash(as_slice(hash)); } AesCbcState calc_aes_cbc_state_sha512(Slice seed) { LOG(INFO) << "Begin AES CBC state calculation"; UInt<512> hash; - auto hash_slice = as_slice(hash); - sha512(seed, hash_slice); - return calc_aes_cbc_state_hash(hash_slice); + sha512(seed, as_mutable_slice(hash)); + return calc_aes_cbc_state_hash(as_slice(hash)); } template @@ -72,20 +70,20 @@ Result calc_value_hash(const DataView &data_view) { return Status::OK(); })); UInt256 res; - state.extract(as_slice(res)); + state.extract(as_mutable_slice(res)); return ValueHash{res}; } ValueHash calc_value_hash(Slice data) { UInt256 res; - sha256(data, as_slice(res)); + sha256(data, as_mutable_slice(res)); return ValueHash{res}; } BufferSlice gen_random_prefix(int64 data_size) { BufferSlice buff(narrow_cast(((32 + 15 + data_size) & -16) - data_size)); - Random::secure_bytes(buff.as_slice()); - buff.as_slice()[0] = narrow_cast(buff.size()); + Random::secure_bytes(buff.as_mutable_slice()); + buff.as_mutable_slice()[0] = narrow_cast(buff.size()); CHECK((buff.size() + data_size) % 16 == 0); return buff; } @@ -111,7 +109,7 @@ int64 FileDataView::size() const { Result FileDataView::pread(int64 offset, int64 size) const { auto slice = BufferSlice(narrow_cast(size)); - TRY_RESULT(actual_size, fd_.pread(slice.as_slice(), offset)); + TRY_RESULT(actual_size, fd_.pread(slice.as_mutable_slice(), offset)); if (static_cast(actual_size) != size) { return Status::Error("Not enough data in file"); } @@ -166,8 +164,8 @@ Result ConcatDataView::pread(int64 offset, int64 size) const { } BufferSlice res(a.size() + b.size()); - res.as_slice().copy_from(a.as_slice()); - res.as_slice().substr(a.size()).copy_from(b.as_slice()); + res.as_mutable_slice().copy_from(a.as_slice()); + res.as_mutable_slice().substr(a.size()).copy_from(b.as_slice()); return std::move(res); } @@ -195,17 +193,17 @@ Result Secret::create(Slice secret) { return Status::Error(PSLICE() << "Wrong checksum " << checksum); } UInt256 res; - ::td::as_slice(res).copy_from(secret); + ::td::as_mutable_slice(res).copy_from(secret); UInt256 secret_sha256; - sha256(secret, ::td::as_slice(secret_sha256)); + sha256(secret, ::td::as_mutable_slice(secret_sha256)); int64 hash = as(secret_sha256.raw); return Secret{res, hash}; } Secret Secret::create_new() { UInt256 secret; - auto secret_slice = ::td::as_slice(secret); + auto secret_slice = ::td::as_mutable_slice(secret); Random::secure_bytes(secret_slice); auto checksum_diff = secret_checksum(secret_slice); auto new_byte = static_cast((static_cast(secret_slice.ubegin()[0]) + checksum_diff) % 255); @@ -239,7 +237,7 @@ EncryptedSecret Secret::encrypt(Slice key, Slice salt, EnryptionAlgorithm algori }(); UInt256 res; - aes_cbc_state.encrypt(as_slice(), ::td::as_slice(res)); + aes_cbc_state.encrypt(as_slice(), ::td::as_mutable_slice(res)); return EncryptedSecret::create(::td::as_slice(res)).move_as_ok(); } @@ -251,7 +249,7 @@ Result EncryptedSecret::create(Slice encrypted_secret) { return Status::Error("Wrong encrypted secret size"); } UInt256 res; - ::td::as_slice(res).copy_from(encrypted_secret); + ::td::as_mutable_slice(res).copy_from(encrypted_secret); return EncryptedSecret{res}; } @@ -269,7 +267,7 @@ Result EncryptedSecret::decrypt(Slice key, Slice salt, EnryptionAlgorith }(); UInt256 res; - aes_cbc_state.decrypt(::td::as_slice(encrypted_secret_), ::td::as_slice(res)); + aes_cbc_state.decrypt(::td::as_slice(encrypted_secret_), ::td::as_mutable_slice(res)); return Secret::create(::td::as_slice(res)); } @@ -291,7 +289,7 @@ Result Decryptor::append(BufferSlice data) { if (data.size() % 16 != 0) { return Status::Error("Part size must be divisible by 16"); } - aes_cbc_state_.decrypt(data.as_slice(), data.as_slice()); + aes_cbc_state_.decrypt(data.as_slice(), data.as_mutable_slice()); sha256_state_.feed(data.as_slice()); if (!skipped_prefix_) { to_skip_ = data.as_slice().ubegin()[0]; @@ -314,7 +312,7 @@ Result Decryptor::finish() { } UInt256 res; - sha256_state_.extract(as_slice(res), true); + sha256_state_.extract(as_mutable_slice(res), true); return ValueHash{res}; } @@ -334,7 +332,7 @@ Result Encryptor::pread(int64 offset, int64 size) const { return Status::Error("Part size must be divisible by 16"); } TRY_RESULT(part, data_view_.pread(offset, size)); - aes_cbc_state_.encrypt(part.as_slice(), part.as_slice()); + aes_cbc_state_.encrypt(part.as_slice(), part.as_mutable_slice()); current_offset_ += size; return std::move(part); } diff --git a/td/telegram/StickersManager.cpp b/td/telegram/StickersManager.cpp index 2cb5e2b8a..cc7c8d041 100644 --- a/td/telegram/StickersManager.cpp +++ b/td/telegram/StickersManager.cpp @@ -5491,7 +5491,7 @@ string StickersManager::get_sticker_set_database_value(const StickerSet *s, bool store_sticker_set(s, with_stickers, storer_calc_length, source); BufferSlice value_buffer{storer_calc_length.get_length()}; - auto value = value_buffer.as_slice(); + auto value = value_buffer.as_mutable_slice(); LOG(DEBUG) << "Serialized size of " << s->id_ << " is " << value.size(); diff --git a/td/telegram/cli.cpp b/td/telegram/cli.cpp index 68f010e9c..83397d792 100644 --- a/td/telegram/cli.cpp +++ b/td/telegram/cli.cpp @@ -5403,7 +5403,10 @@ class CliClient final : public Actor { it->part_size = left_size; } BufferSlice block(narrow_cast(it->part_size)); - FileFd::open(it->source, FileFd::Flags::Read).move_as_ok().pread(block.as_slice(), it->local_size).ensure(); + FileFd::open(it->source, FileFd::Flags::Read) + .move_as_ok() + .pread(block.as_mutable_slice(), it->local_size) + .ensure(); if (rand_bool()) { auto open_flags = FileFd::Flags::Write | (it->local_size ? 0 : FileFd::Flags::Truncate | FileFd::Flags::Create); FileFd::open(it->destination, open_flags).move_as_ok().pwrite(block.as_slice(), it->local_size).ensure(); diff --git a/td/telegram/files/FileDb.h b/td/telegram/files/FileDb.h index 750e82220..b0586c6fa 100644 --- a/td/telegram/files/FileDb.h +++ b/td/telegram/files/FileDb.h @@ -51,7 +51,7 @@ class FileDbInterface { object.as_key().store(calc_length); BufferSlice key_buffer{calc_length.get_length()}; - auto key = key_buffer.as_slice(); + auto key = key_buffer.as_mutable_slice(); TlStorerUnsafe storer(key.ubegin()); storer.store_int(LocationT::KEY_MAGIC); object.as_key().store(storer); diff --git a/td/telegram/files/FileDownloader.cpp b/td/telegram/files/FileDownloader.cpp index 4545ea27a..7f2f1c95e 100644 --- a/td/telegram/files/FileDownloader.cpp +++ b/td/telegram/files/FileDownloader.cpp @@ -351,7 +351,7 @@ Result FileDownloader::process_part(Part part, NetQueryPtr net_query) { string iv = cdn_encryption_iv_; as(&iv[12]) = offset; ctr_state.init(cdn_encryption_key_, iv); - ctr_state.decrypt(bytes.as_slice(), bytes.as_slice()); + ctr_state.decrypt(bytes.as_slice(), bytes.as_mutable_slice()); } if (encryption_key_.is_secret()) { LOG_CHECK(next_part_ == part.id) << tag("expected part.id", next_part_) << "!=" << tag("part.id", part.id); @@ -360,8 +360,8 @@ Result FileDownloader::process_part(Part part, NetQueryPtr net_query) { if (part.size % 16 != 0) { next_part_stop_ = true; } - aes_ige_decrypt(as_slice(encryption_key_.key()), as_slice(encryption_key_.mutable_iv()), bytes.as_slice(), - bytes.as_slice()); + aes_ige_decrypt(as_slice(encryption_key_.key()), as_mutable_slice(encryption_key_.mutable_iv()), bytes.as_slice(), + bytes.as_mutable_slice()); } auto slice = bytes.as_slice().substr(0, part.size); @@ -445,7 +445,7 @@ Result FileDownloader::check_loop(int64 checked_prefix_si auto size = narrow_cast(end_offset - begin_offset); auto slice = BufferSlice(size); TRY_STATUS(acquire_fd()); - TRY_RESULT(read_size, fd_.pread(slice.as_slice(), begin_offset)); + TRY_RESULT(read_size, fd_.pread(slice.as_mutable_slice(), begin_offset)); if (size != read_size) { return Status::Error("Failed to read file to check hash"); } diff --git a/td/telegram/files/FileHashUploader.cpp b/td/telegram/files/FileHashUploader.cpp index 06c3836cd..5357bfaf3 100644 --- a/td/telegram/files/FileHashUploader.cpp +++ b/td/telegram/files/FileHashUploader.cpp @@ -68,7 +68,7 @@ Status FileHashUploader::loop_impl() { if (state_ == State::NetRequest) { // messages.getDocumentByHash#338e2464 sha256:bytes size:long mime_type:string = Document; auto hash = BufferSlice(32); - sha256_state_.extract(hash.as_slice(), true); + sha256_state_.extract(hash.as_mutable_slice(), true); auto mime_type = MimeType::from_extension(PathView(local_.path_).extension(), "image/gif"); auto query = telegram_api::messages_getDocumentByHash(std::move(hash), size_, std::move(mime_type)); LOG(INFO) << "Send getDocumentByHash request: " << to_string(query); diff --git a/td/telegram/files/FileUploader.cpp b/td/telegram/files/FileUploader.cpp index e584a7e54..0420f7775 100644 --- a/td/telegram/files/FileUploader.cpp +++ b/td/telegram/files/FileUploader.cpp @@ -224,12 +224,12 @@ Status FileUploader::generate_iv_map() { CHECK(!fd_.empty()); for (; generate_offset_ + static_cast(part_size) < local_size_; generate_offset_ += static_cast(part_size)) { - TRY_RESULT(read_size, fd_.pread(bytes.as_slice(), generate_offset_)); + TRY_RESULT(read_size, fd_.pread(bytes.as_mutable_slice(), generate_offset_)); if (read_size != part_size) { return Status::Error("Failed to read file part (for iv_map)"); } - aes_ige_encrypt(as_slice(encryption_key.key()), as_slice(encryption_key.mutable_iv()), bytes.as_slice(), - bytes.as_slice()); + aes_ige_encrypt(as_slice(encryption_key.key()), as_mutable_slice(encryption_key.mutable_iv()), bytes.as_slice(), + bytes.as_mutable_slice()); iv_map_.push_back(encryption_key.mutable_iv()); } generate_iv_ = encryption_key.iv_slice().str(); @@ -254,11 +254,12 @@ Result> FileUploader::start_part(Part part, int32 p padded_size = (padded_size + 15) & ~15; } BufferSlice bytes(padded_size); - TRY_RESULT(size, fd_.pread(bytes.as_slice().truncate(part.size), part.offset)); + TRY_RESULT(size, fd_.pread(bytes.as_mutable_slice().truncate(part.size), part.offset)); if (encryption_key_.is_secret()) { - Random::secure_bytes(bytes.as_slice().substr(part.size)); + Random::secure_bytes(bytes.as_mutable_slice().substr(part.size)); if (next_offset_ == part.offset) { - aes_ige_encrypt(as_slice(encryption_key_.key()), as_slice(iv_), bytes.as_slice(), bytes.as_slice()); + aes_ige_encrypt(as_slice(encryption_key_.key()), as_mutable_slice(iv_), bytes.as_slice(), + bytes.as_mutable_slice()); next_offset_ += static_cast(bytes.size()); } else { if (part.id >= static_cast(iv_map_.size())) { @@ -266,7 +267,8 @@ Result> FileUploader::start_part(Part part, int32 p } CHECK(part.id < static_cast(iv_map_.size()) && part.id >= 0); auto iv = iv_map_[part.id]; - aes_ige_encrypt(as_slice(encryption_key_.key()), as_slice(iv), bytes.as_slice(), bytes.as_slice()); + aes_ige_encrypt(as_slice(encryption_key_.key()), as_mutable_slice(iv), bytes.as_slice(), + bytes.as_mutable_slice()); } } diff --git a/td/telegram/logevent/LogEvent.h b/td/telegram/logevent/LogEvent.h index 4464af9cf..ecac0c2a2 100644 --- a/td/telegram/logevent/LogEvent.h +++ b/td/telegram/logevent/LogEvent.h @@ -206,7 +206,7 @@ BufferSlice log_event_store_impl(const T &data, const char *file, int line) { store(data, storer_calc_length); BufferSlice value_buffer{storer_calc_length.get_length()}; - auto ptr = value_buffer.as_slice().ubegin(); + auto ptr = value_buffer.as_mutable_slice().ubegin(); LOG_CHECK(is_aligned_pointer<4>(ptr)) << ptr; LogEventStorerUnsafe storer_unsafe(ptr); diff --git a/td/telegram/net/NetQueryCreator.cpp b/td/telegram/net/NetQueryCreator.cpp index 2fa9c7071..4d14c8504 100644 --- a/td/telegram/net/NetQueryCreator.cpp +++ b/td/telegram/net/NetQueryCreator.cpp @@ -35,7 +35,7 @@ NetQueryPtr NetQueryCreator::create(uint64 id, const telegram_api::Function &fun LOG(INFO) << "Create query " << to_string(function); auto storer = DefaultStorer(function); BufferSlice slice(storer.size()); - auto real_size = storer.store(slice.as_slice().ubegin()); + auto real_size = storer.store(slice.as_mutable_slice().ubegin()); LOG_CHECK(real_size == slice.size()) << real_size << " " << slice.size() << " " << format::as_hex_dump<4>(Slice(slice.as_slice())); diff --git a/td/telegram/net/Session.cpp b/td/telegram/net/Session.cpp index 93c7088c8..092bf66bf 100644 --- a/td/telegram/net/Session.cpp +++ b/td/telegram/net/Session.cpp @@ -702,7 +702,7 @@ void Session::on_session_created(uint64 unique_id, uint64 first_message_id) { if (is_main_) { LOG(DEBUG) << "Sending updatesTooLong to force getDifference"; BufferSlice packet(4); - as(packet.as_slice().begin()) = telegram_api::updatesTooLong::ID; + as(packet.as_mutable_slice().begin()) = telegram_api::updatesTooLong::ID; last_activity_timestamp_ = Time::now(); callback_->on_update(std::move(packet), auth_data_.get_auth_key().id()); } diff --git a/tddb/td/db/binlog/Binlog.cpp b/tddb/td/db/binlog/Binlog.cpp index ddd6a723c..3ad28c8e9 100644 --- a/tddb/td/db/binlog/Binlog.cpp +++ b/tddb/td/db/binlog/Binlog.cpp @@ -581,9 +581,9 @@ Status Binlog::load_binlog(const Callback &callback, const Callback &debug_callb } void Binlog::update_encryption(Slice key, Slice iv) { - as_slice(aes_ctr_key_).copy_from(key); + as_mutable_slice(aes_ctr_key_).copy_from(key); UInt128 aes_ctr_iv; - as_slice(aes_ctr_iv).copy_from(iv); + as_mutable_slice(aes_ctr_iv).copy_from(iv); aes_ctr_state_.init(as_slice(aes_ctr_key_), as_slice(aes_ctr_iv)); } diff --git a/tddb/td/db/binlog/BinlogEvent.cpp b/tddb/td/db/binlog/BinlogEvent.cpp index 0b0801815..56926180d 100644 --- a/tddb/td/db/binlog/BinlogEvent.cpp +++ b/tddb/td/db/binlog/BinlogEvent.cpp @@ -55,7 +55,7 @@ Status BinlogEvent::validate() const { BufferSlice BinlogEvent::create_raw(uint64 id, int32 type, int32 flags, const Storer &storer) { auto raw_event = BufferSlice{storer.size() + MIN_SIZE}; - TlStorerUnsafe tl_storer(raw_event.as_slice().ubegin()); + TlStorerUnsafe tl_storer(raw_event.as_mutable_slice().ubegin()); tl_storer.store_int(narrow_cast(raw_event.size())); tl_storer.store_long(id); tl_storer.store_int(type); diff --git a/tddb/td/db/binlog/BinlogEvent.h b/tddb/td/db/binlog/BinlogEvent.h index 0127163ba..c429638a2 100644 --- a/tddb/td/db/binlog/BinlogEvent.h +++ b/tddb/td/db/binlog/BinlogEvent.h @@ -100,7 +100,7 @@ struct BinlogEvent { static BufferSlice create_raw(uint64 id, int32 type, int32 flags, const Storer &storer); - std::string public_to_string() const { + string public_to_string() const { return PSTRING() << "LogEvent[" << tag("id", format::as_hex(id_)) << tag("type", type_) << tag("flags", flags_) << tag("data", get_data().size()) << "]" << debug_info_; } diff --git a/tdnet/td/net/HttpReader.cpp b/tdnet/td/net/HttpReader.cpp index 51a62bc1e..a2aaa7828 100644 --- a/tdnet/td/net/HttpReader.cpp +++ b/tdnet/td/net/HttpReader.cpp @@ -162,7 +162,7 @@ Result HttpReader::read_next(HttpQuery *query, bool can_be_slow) { if (flow_sink_.is_ready()) { CHECK(query_->container_.size() == 1u); query_->container_.emplace_back(content_->cut_head(content_->size()).move_as_buffer_slice()); - query_->content_ = query_->container_.back().as_slice(); + query_->content_ = query_->container_.back().as_mutable_slice(); break; } @@ -207,9 +207,9 @@ Result HttpReader::read_next(HttpQuery *query, bool can_be_slow) { query_->container_.emplace_back(content_->cut_head(size).move_as_buffer_slice()); Status result; if (content_type_lowercased_.find("application/x-www-form-urlencoded") != string::npos) { - result = parse_parameters(query_->container_.back().as_slice()); + result = parse_parameters(query_->container_.back().as_mutable_slice()); } else { - result = parse_json_parameters(query_->container_.back().as_slice()); + result = parse_json_parameters(query_->container_.back().as_mutable_slice()); } if (result.is_error()) { if (result.code() == 413) { @@ -293,7 +293,7 @@ Result HttpReader::parse_multipart_form_data(bool can_be_slow) { CHECK(temp_file_.empty()); temp_file_name_.clear(); - Parser headers_parser(headers.as_slice()); + Parser headers_parser(headers.as_mutable_slice()); while (headers_parser.status().is_ok() && !headers_parser.data().empty()) { MutableSlice header_name = headers_parser.read_till(':'); headers_parser.skip(':'); @@ -432,7 +432,7 @@ Result HttpReader::parse_multipart_form_data(bool can_be_slow) { } query_->container_.emplace_back(content_->cut_head(form_data_read_length_).move_as_buffer_slice()); - MutableSlice value = query_->container_.back().as_slice(); + MutableSlice value = query_->container_.back().as_mutable_slice(); content_->advance(boundary_.size()); form_data_skipped_length_ += form_data_read_length_ + boundary_.size(); form_data_read_length_ = 0; @@ -538,7 +538,7 @@ Result HttpReader::split_header() { CHECK(query_->container_.back().size() == headers_read_length_ + 2); input_->advance(2); total_headers_length_ = headers_read_length_; - auto status = parse_head(query_->container_.back().as_slice()); + auto status = parse_head(query_->container_.back().as_mutable_slice()); if (status.is_error()) { return std::move(status); } @@ -641,7 +641,7 @@ Status HttpReader::parse_json_parameters(MutableSlice parameters) { return Status::Error(400, "Bad Request: extra data after string"); } query_->container_.emplace_back("content"); - query_->args_.emplace_back(query_->container_.back().as_slice(), r_value.move_as_ok()); + query_->args_.emplace_back(query_->container_.back().as_mutable_slice(), r_value.move_as_ok()); return Status::OK(); } parser.skip('{'); diff --git a/tdutils/td/utils/BufferedUdp.h b/tdutils/td/utils/BufferedUdp.h index 2210c9a07..8a64c04af 100644 --- a/tdutils/td/utils/BufferedUdp.h +++ b/tdutils/td/utils/BufferedUdp.h @@ -51,7 +51,7 @@ class UdpReaderHelper { buffer_ = BufferSlice(RESERVED_SIZE); } CHECK(buffer_.size() >= MAX_PACKET_SIZE); - message.data = buffer_.as_slice().substr(0, MAX_PACKET_SIZE); + message.data = buffer_.as_mutable_slice().substr(0, MAX_PACKET_SIZE); } UdpMessage extract_udp_message(UdpSocketFd::InboundMessage &message) { diff --git a/tdutils/td/utils/Slice.h b/tdutils/td/utils/Slice.h index c797d7403..90393ce1f 100644 --- a/tdutils/td/utils/Slice.h +++ b/tdutils/td/utils/Slice.h @@ -304,7 +304,7 @@ inline Slice as_slice(Slice slice) { return slice; } -inline MutableSlice as_slice(MutableSlice slice) { +inline Slice as_slice(MutableSlice slice) { return slice; } @@ -312,10 +312,6 @@ inline Slice as_slice(const string &str) { return str; } -inline MutableSlice as_slice(string &str) { - return str; -} - inline MutableSlice as_mutable_slice(MutableSlice slice) { return slice; } diff --git a/tdutils/td/utils/UInt.h b/tdutils/td/utils/UInt.h index 12b1c4192..9b682a39e 100644 --- a/tdutils/td/utils/UInt.h +++ b/tdutils/td/utils/UInt.h @@ -20,7 +20,7 @@ struct UInt { return Slice(raw, size / 8); } - MutableSlice as_slice() { + MutableSlice as_mutable_slice() { return MutableSlice(raw, size / 8); } @@ -76,8 +76,8 @@ Slice as_slice(const UInt &value) { } template -MutableSlice as_slice(UInt &value) { - return value.as_slice(); +MutableSlice as_mutable_slice(UInt &value) { + return value.as_mutable_slice(); } template diff --git a/tdutils/td/utils/buffer.h b/tdutils/td/utils/buffer.h index 6b7973bb3..b34296a1b 100644 --- a/tdutils/td/utils/buffer.h +++ b/tdutils/td/utils/buffer.h @@ -141,7 +141,7 @@ class BufferSlice { } explicit BufferSlice(Slice slice) : BufferSlice(slice.size()) { - as_slice().copy_from(slice); + as_mutable_slice().copy_from(slice); } BufferSlice(const char *ptr, size_t size) : BufferSlice(Slice(ptr, size)) { @@ -183,7 +183,7 @@ class BufferSlice { return as_slice(); } - MutableSlice as_slice() { + MutableSlice as_mutable_slice() { if (is_null()) { return MutableSlice(); } @@ -230,7 +230,7 @@ class BufferSlice { // like in std::string char *data() { - return as_slice().data(); + return as_mutable_slice().data(); } const char *data() const { return as_slice().data(); @@ -305,7 +305,7 @@ class BufferWriter { } BufferWriter(Slice slice, size_t prepend, size_t append) : BufferWriter(BufferAllocator::create_writer(slice.size(), prepend, append)) { - as_slice().copy_from(slice); + as_mutable_slice().copy_from(slice); } explicit BufferWriter(BufferWriterPtr buffer_ptr) : buffer_(std::move(buffer_ptr)) { } @@ -325,7 +325,7 @@ class BufferWriter { } return buffer_->end_.load(std::memory_order_relaxed) - buffer_->begin_; } - MutableSlice as_slice() { + MutableSlice as_mutable_slice() { auto end = buffer_->end_.load(std::memory_order_relaxed); return MutableSlice(buffer_->data_ + buffer_->begin_, buffer_->data_ + end); } @@ -657,7 +657,7 @@ class ChainBufferReader { } else { auto save_size = size(); res = BufferSlice{save_size}; - advance(save_size, res.as_slice()); + advance(save_size, res.as_mutable_slice()); } *this = ChainBufferReader(); return res; @@ -828,11 +828,9 @@ class BufferBuilder { inline Slice as_slice(const BufferSlice &value) { return value.as_slice(); } -inline MutableSlice as_slice(BufferSlice &value) { - return value.as_slice(); -} + inline MutableSlice as_mutable_slice(BufferSlice &value) { - return value.as_slice(); + return value.as_mutable_slice(); } } // namespace td diff --git a/tdutils/td/utils/crypto.cpp b/tdutils/td/utils/crypto.cpp index ed6c492b0..19a5415e5 100644 --- a/tdutils/td/utils/crypto.cpp +++ b/tdutils/td/utils/crypto.cpp @@ -1043,7 +1043,7 @@ Result rsa_encrypt_pkcs1_oaep(Slice public_key, Slice data) { int outlen = RSA_size(rsa); BufferSlice res(outlen); if (RSA_public_encrypt(narrow_cast(data.size()), const_cast(data.ubegin()), - res.as_slice().ubegin(), rsa, RSA_PKCS1_OAEP_PADDING) != outlen) { + res.as_mutable_slice().ubegin(), rsa, RSA_PKCS1_OAEP_PADDING) != outlen) { #else EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new(pkey, nullptr); if (!ctx) { @@ -1065,7 +1065,7 @@ Result rsa_encrypt_pkcs1_oaep(Slice public_key, Slice data) { return Status::Error("Cannot calculate encrypted length"); } BufferSlice res(outlen); - if (EVP_PKEY_encrypt(ctx, res.as_slice().ubegin(), &outlen, data.ubegin(), data.size()) <= 0) { + if (EVP_PKEY_encrypt(ctx, res.as_mutable_slice().ubegin(), &outlen, data.ubegin(), data.size()) <= 0) { #endif return Status::Error("Cannot encrypt"); } @@ -1095,7 +1095,7 @@ Result rsa_decrypt_pkcs1_oaep(Slice private_key, Slice data) { size_t outlen = RSA_size(rsa); BufferSlice res(outlen); auto inlen = RSA_private_decrypt(narrow_cast(data.size()), const_cast(data.ubegin()), - res.as_slice().ubegin(), rsa, RSA_PKCS1_OAEP_PADDING); + res.as_mutable_slice().ubegin(), rsa, RSA_PKCS1_OAEP_PADDING); if (inlen == -1) { return Status::Error("Cannot decrypt"); } @@ -1121,7 +1121,7 @@ Result rsa_decrypt_pkcs1_oaep(Slice private_key, Slice data) { return Status::Error("Cannot calculate decrypted length"); } BufferSlice res(outlen); - if (EVP_PKEY_decrypt(ctx, res.as_slice().ubegin(), &outlen, data.ubegin(), data.size()) <= 0) { + if (EVP_PKEY_decrypt(ctx, res.as_mutable_slice().ubegin(), &outlen, data.ubegin(), data.size()) <= 0) { return Status::Error("Cannot decrypt"); } #endif diff --git a/tdutils/test/crypto.cpp b/tdutils/test/crypto.cpp index f4a03a6a5..cb1e9a352 100644 --- a/tdutils/test/crypto.cpp +++ b/tdutils/test/crypto.cpp @@ -23,7 +23,7 @@ static td::vector strings{"", "1", "short test string", td::string(1 TEST(Crypto, Aes) { td::Random::Xorshift128plus rnd(123); td::UInt256 key; - rnd.bytes(as_slice(key)); + rnd.bytes(as_mutable_slice(key)); td::string plaintext(16, '\0'); td::string encrypted(16, '\0'); td::string decrypted(16, '\0'); @@ -34,8 +34,8 @@ TEST(Crypto, Aes) { td::AesState decryptor; decryptor.init(as_slice(key), false); - encryptor.encrypt(td::as_slice(plaintext).ubegin(), td::as_slice(encrypted).ubegin(), 16); - decryptor.decrypt(td::as_slice(encrypted).ubegin(), td::as_slice(decrypted).ubegin(), 16); + encryptor.encrypt(td::as_slice(plaintext).ubegin(), td::as_mutable_slice(encrypted).ubegin(), 16); + decryptor.decrypt(td::as_slice(encrypted).ubegin(), td::as_mutable_slice(decrypted).ubegin(), 16); CHECK(decrypted == plaintext); CHECK(decrypted != encrypted); @@ -135,7 +135,7 @@ TEST(Crypto, AesIgeState) { for (const auto &str : td::rand_split(td::string(length / 16, '\0'))) { auto len = 16 * str.size(); state.encrypt(td::Slice(s).substr(pos, len), td::MutableSlice(t).substr(pos, len)); - td::aes_ige_encrypt(as_slice(key), as_slice(iv_copy), td::Slice(s).substr(pos, len), + td::aes_ige_encrypt(as_slice(key), as_mutable_slice(iv_copy), td::Slice(s).substr(pos, len), td::MutableSlice(u).substr(pos, len)); pos += len; } @@ -149,7 +149,7 @@ TEST(Crypto, AesIgeState) { for (const auto &str : td::rand_split(td::string(length / 16, '\0'))) { auto len = 16 * str.size(); state.decrypt(td::Slice(t).substr(pos, len), td::MutableSlice(t).substr(pos, len)); - td::aes_ige_decrypt(as_slice(key), as_slice(iv_copy), td::Slice(u).substr(pos, len), + td::aes_ige_decrypt(as_slice(key), as_mutable_slice(iv_copy), td::Slice(u).substr(pos, len), td::MutableSlice(u).substr(pos, len)); pos += len; } @@ -191,7 +191,7 @@ TEST(Crypto, AesCbcState) { for (const auto &str : td::rand_split(td::string(length / 16, '\0'))) { auto len = 16 * str.size(); state.encrypt(td::Slice(s).substr(pos, len), td::MutableSlice(t).substr(pos, len)); - td::aes_cbc_encrypt(as_slice(key), as_slice(iv_copy), td::Slice(s).substr(pos, len), + td::aes_cbc_encrypt(as_slice(key), as_mutable_slice(iv_copy), td::Slice(s).substr(pos, len), td::MutableSlice(u).substr(pos, len)); pos += len; } @@ -205,7 +205,7 @@ TEST(Crypto, AesCbcState) { for (const auto &str : td::rand_split(td::string(length / 16, '\0'))) { auto len = 16 * str.size(); state.decrypt(td::Slice(t).substr(pos, len), td::MutableSlice(t).substr(pos, len)); - td::aes_cbc_decrypt(as_slice(key), as_slice(iv_copy), td::Slice(u).substr(pos, len), + td::aes_cbc_decrypt(as_slice(key), as_mutable_slice(iv_copy), td::Slice(u).substr(pos, len), td::MutableSlice(u).substr(pos, len)); pos += len; } @@ -221,7 +221,7 @@ TEST(Crypto, Sha256State) { for (auto length : {0, 1, 31, 32, 33, 9999, 10000, 10001, 999999, 1000001}) { auto s = td::rand_string(std::numeric_limits::min(), std::numeric_limits::max(), length); td::UInt256 baseline; - td::sha256(s, as_slice(baseline)); + td::sha256(s, as_mutable_slice(baseline)); td::Sha256State state; state.init(); @@ -232,7 +232,7 @@ TEST(Crypto, Sha256State) { } state = std::move(state2); td::UInt256 result; - state.extract(as_slice(result)); + state.extract(as_mutable_slice(result)); ASSERT_TRUE(baseline == result); } } diff --git a/test/secret.cpp b/test/secret.cpp index 05b91af1c..587a2d314 100644 --- a/test/secret.cpp +++ b/test/secret.cpp @@ -832,7 +832,7 @@ class Master final : public Actor { config.version_ = 12; auto storer = TLObjectStorer(config); BufferSlice answer(storer.size()); - auto real_size = storer.store(answer.as_slice().ubegin()); + auto real_size = storer.store(answer.as_mutable_slice().ubegin()); CHECK(real_size == answer.size()); net_query->set_ok(std::move(answer)); send_closure(std::move(callback), &NetQueryCallback::on_result, std::move(net_query)); @@ -857,7 +857,7 @@ class Master final : public Actor { my_api::encryptedChat encrypted_chat(123, 321, 0, 1, 2, BufferSlice(), request_encryption.key_fingerprint_); auto storer = TLObjectStorer(encrypted_chat); BufferSlice answer(storer.size()); - auto real_size = storer.store(answer.as_slice().ubegin()); + auto real_size = storer.store(answer.as_mutable_slice().ubegin()); CHECK(real_size == answer.size()); net_query->set_ok(std::move(answer)); send_closure(std::move(callback), &NetQueryCallback::on_result, std::move(net_query)); @@ -899,8 +899,8 @@ class Master final : public Actor { void process_net_query_send_encrypted(BufferSlice data, NetQueryPtr net_query, ActorShared callback) { BufferSlice answer(8); - answer.as_slice().fill(0); - as(answer.as_slice().begin()) = static_cast(my_api::messages_sentEncryptedMessage::ID); + answer.as_mutable_slice().fill(0); + as(answer.as_mutable_slice().begin()) = static_cast(my_api::messages_sentEncryptedMessage::ID); net_query->set_ok(std::move(answer)); send_closure(std::move(callback), &NetQueryCallback::on_result, std::move(net_query));