From ffc6589fa13657706f8757db5b9a74e85bc34963 Mon Sep 17 00:00:00 2001 From: Mikhail Filimonov Date: Tue, 15 Apr 2025 21:34:30 +0300 Subject: [PATCH] update macos --- .../td/td/generate/auto/td/telegram/e2e_api.h | 36 ++++ .../td/td/generate/auto/td/telegram/td_api.h | 179 ++++++++++++++---- .../generate/auto/td/telegram/td_api_json.h | 22 ++- .../td/td/telegram/AuthManager.h | 34 ++++ .../td/telegram/BusinessConnectionManager.h | 5 +- .../SharedHeaders/td/td/telegram/CallActor.h | 2 +- .../SharedHeaders/td/td/telegram/DialogDate.h | 9 + .../td/td/telegram/DialogInviteLinkManager.h | 2 +- .../SharedHeaders/td/td/telegram/ForumTopic.h | 5 + .../td/td/telegram/ForumTopicInfo.h | 2 +- .../td/td/telegram/ForumTopicManager.h | 11 +- .../td/td/telegram/MessageContent.h | 4 +- .../td/td/telegram/MessagesManager.h | 18 +- .../td/td/telegram/PhoneNumberManager.h | 4 +- .../SharedHeaders/td/td/telegram/Premium.h | 8 +- .../SharedHeaders/td/td/telegram/Requests.h | 8 +- .../td/td/telegram/UpdatesManager.h | 4 +- .../td/td/telegram/UserManager.h | 16 +- .../td/td/telegram/net/ConnectionCreator.h | 2 +- .../td/td/telegram/net/DcAuthManager.h | 2 +- .../td/td/telegram/net/Session.h | 4 +- .../td/tde2e/td/e2e/Blockchain.h | 3 + .../SharedHeaders/td/tde2e/td/e2e/Call.h | 30 +-- .../SharedHeaders/td/tde2e/td/e2e/Container.h | 5 +- .../td/tde2e/td/e2e/EncryptedStorage.h | 2 +- .../td/tde2e/td/e2e/MessageEncryption.h | 12 +- .../td/tde2e/td/e2e/TestBlockchain.h | 6 +- .../SharedHeaders/td/tde2e/td/e2e/Trie.h | 5 + .../SharedHeaders/td/tde2e/td/e2e/e2e_api.h | 6 +- .../td/tde2e/td/e2e/e2e_errors.h | 8 +- .../SharedHeaders/td/tde2e/td/e2e/utils.h | 6 + .../td/tde2e/test/EncryptionTestVectors.h | 105 +++++----- .../td/tdutils/td/utils/ChainScheduler.h | 2 +- .../td/tdutils/td/utils/ConcurrentHashTable.h | 8 +- .../td/tdutils/td/utils/Ed25519.h | 10 +- .../td/tdutils/td/utils/FlatHashMapChunks.h | 2 +- 36 files changed, 425 insertions(+), 162 deletions(-) diff --git a/third-party/td/TdBinding/SharedHeaders/td/td/generate/auto/td/telegram/e2e_api.h b/third-party/td/TdBinding/SharedHeaders/td/td/generate/auto/td/telegram/e2e_api.h index 72d3e74ba1..26cf860f0b 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/td/generate/auto/td/telegram/e2e_api.h +++ b/third-party/td/TdBinding/SharedHeaders/td/td/generate/auto/td/telegram/e2e_api.h @@ -101,6 +101,42 @@ class ok final : public Object { void store(TlStorerToString &s, const char *field_name) const final; }; +class e2e_callPacket final : public Object { + std::int32_t get_id() const final { + return ID; + } + + public: + + static const std::int32_t ID = 1084669673; + + static object_ptr fetch(TlParser &p); + + void store(TlStorerCalcLength &s) const final; + + void store(TlStorerUnsafe &s) const final; + + void store(TlStorerToString &s, const char *field_name) const final; +}; + +class e2e_callPacketLargeMsgId final : public Object { + std::int32_t get_id() const final { + return ID; + } + + public: + + static const std::int32_t ID = 484797485; + + static object_ptr fetch(TlParser &p); + + void store(TlStorerCalcLength &s) const final; + + void store(TlStorerUnsafe &s) const final; + + void store(TlStorerToString &s, const char *field_name) const final; +}; + class e2e_HandshakePrivate: public Object { public: diff --git a/third-party/td/TdBinding/SharedHeaders/td/td/generate/auto/td/telegram/td_api.h b/third-party/td/TdBinding/SharedHeaders/td/td/generate/auto/td/telegram/td_api.h index d6e917cf96..a2ad13b35d 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/td/generate/auto/td/telegram/td_api.h +++ b/third-party/td/TdBinding/SharedHeaders/td/td/generate/auto/td/telegram/td_api.h @@ -852,6 +852,23 @@ class authorizationStateWaitPhoneNumber final : public AuthorizationState { void store(TlStorerToString &s, const char *field_name) const final; }; +class authorizationStateWaitPremiumPurchase final : public AuthorizationState { + std::int32_t get_id() const final { + return ID; + } + + public: + string store_product_id_; + + authorizationStateWaitPremiumPurchase(); + + explicit authorizationStateWaitPremiumPurchase(string const &store_product_id_); + + static const std::int32_t ID = -862487743; + + void store(TlStorerToString &s, const char *field_name) const final; +}; + class authorizationStateWaitEmailAddress final : public AuthorizationState { std::int32_t get_id() const final { return ID; @@ -8687,6 +8704,7 @@ class forumTopic final : public Object { public: object_ptr info_; object_ptr last_message_; + int64 order_; bool is_pinned_; int32 unread_count_; int53 last_read_inbox_message_id_; @@ -8698,9 +8716,9 @@ class forumTopic final : public Object { forumTopic(); - forumTopic(object_ptr &&info_, object_ptr &&last_message_, bool is_pinned_, int32 unread_count_, int53 last_read_inbox_message_id_, int53 last_read_outbox_message_id_, int32 unread_mention_count_, int32 unread_reaction_count_, object_ptr &¬ification_settings_, object_ptr &&draft_message_); + forumTopic(object_ptr &&info_, object_ptr &&last_message_, int64 order_, bool is_pinned_, int32 unread_count_, int53 last_read_inbox_message_id_, int53 last_read_outbox_message_id_, int32 unread_mention_count_, int32 unread_reaction_count_, object_ptr &¬ification_settings_, object_ptr &&draft_message_); - static const std::int32_t ID = 303279334; + static const std::int32_t ID = -2094608976; void store(TlStorerToString &s, const char *field_name) const final; }; @@ -8733,6 +8751,7 @@ class forumTopicInfo final : public Object { } public: + int53 chat_id_; int53 message_thread_id_; string name_; object_ptr icon_; @@ -8745,9 +8764,9 @@ class forumTopicInfo final : public Object { forumTopicInfo(); - forumTopicInfo(int53 message_thread_id_, string const &name_, object_ptr &&icon_, int32 creation_date_, object_ptr &&creator_id_, bool is_general_, bool is_outgoing_, bool is_closed_, bool is_hidden_); + forumTopicInfo(int53 chat_id_, int53 message_thread_id_, string const &name_, object_ptr &&icon_, int32 creation_date_, object_ptr &&creator_id_, bool is_general_, bool is_outgoing_, bool is_closed_, bool is_hidden_); - static const std::int32_t ID = -1879842914; + static const std::int32_t ID = -654857606; void store(TlStorerToString &s, const char *field_name) const final; }; @@ -26213,6 +26232,46 @@ class storePaymentPurposeGiftedStars final : public StorePaymentPurpose { void store(TlStorerToString &s, const char *field_name) const final; }; +class StoreTransaction: public Object { + public: +}; + +class storeTransactionAppStore final : public StoreTransaction { + std::int32_t get_id() const final { + return ID; + } + + public: + bytes receipt_; + + storeTransactionAppStore(); + + explicit storeTransactionAppStore(bytes const &receipt_); + + static const std::int32_t ID = 1625562441; + + void store(TlStorerToString &s, const char *field_name) const final; +}; + +class storeTransactionGooglePlay final : public StoreTransaction { + std::int32_t get_id() const final { + return ID; + } + + public: + string package_name_; + string store_product_id_; + string purchase_token_; + + storeTransactionGooglePlay(); + + storeTransactionGooglePlay(string const &package_name_, string const &store_product_id_, string const &purchase_token_); + + static const std::int32_t ID = 1094018617; + + void store(TlStorerToString &s, const char *field_name) const final; +}; + class story; class stories final : public Object { @@ -29909,14 +29968,34 @@ class updateForumTopicInfo final : public Update { } public: - int53 chat_id_; object_ptr info_; updateForumTopicInfo(); - updateForumTopicInfo(int53 chat_id_, object_ptr &&info_); + explicit updateForumTopicInfo(object_ptr &&info_); - static const std::int32_t ID = 1802448073; + static const std::int32_t ID = 1420762696; + + void store(TlStorerToString &s, const char *field_name) const final; +}; + +class updateForumTopic final : public Update { + std::int32_t get_id() const final { + return ID; + } + + public: + int53 chat_id_; + int53 message_thread_id_; + bool is_pinned_; + int53 last_read_outbox_message_id_; + object_ptr notification_settings_; + + updateForumTopic(); + + updateForumTopic(int53 chat_id_, int53 message_thread_id_, bool is_pinned_, int53 last_read_outbox_message_id_, object_ptr &¬ification_settings_); + + static const std::int32_t ID = 807069971; void store(TlStorerToString &s, const char *field_name) const final; }; @@ -33817,48 +33896,24 @@ class applyPremiumGiftCode final : public Function { class StorePaymentPurpose; +class StoreTransaction; + class ok; -class assignAppStoreTransaction final : public Function { +class assignStoreTransaction final : public Function { std::int32_t get_id() const final { return ID; } public: - bytes receipt_; + object_ptr transaction_; object_ptr purpose_; - assignAppStoreTransaction(); + assignStoreTransaction(); - assignAppStoreTransaction(bytes const &receipt_, object_ptr &&purpose_); + assignStoreTransaction(object_ptr &&transaction_, object_ptr &&purpose_); - static const std::int32_t ID = -2030892112; - - using ReturnType = object_ptr; - - void store(TlStorerToString &s, const char *field_name) const final; -}; - -class StorePaymentPurpose; - -class ok; - -class assignGooglePlayTransaction final : public Function { - std::int32_t get_id() const final { - return ID; - } - - public: - string package_name_; - string store_product_id_; - string purchase_token_; - object_ptr purpose_; - - assignGooglePlayTransaction(); - - assignGooglePlayTransaction(string const &package_name_, string const &store_product_id_, string const &purchase_token_, object_ptr &&purpose_); - - static const std::int32_t ID = -1992704860; + static const std::int32_t ID = -2046202900; using ReturnType = object_ptr; @@ -34274,6 +34329,28 @@ class checkAuthenticationPasswordRecoveryCode final : public Function { void store(TlStorerToString &s, const char *field_name) const final; }; +class ok; + +class checkAuthenticationPremiumPurchase final : public Function { + std::int32_t get_id() const final { + return ID; + } + + public: + string currency_; + int53 amount_; + + checkAuthenticationPremiumPurchase(); + + checkAuthenticationPremiumPurchase(string const ¤cy_, int53 amount_); + + static const std::int32_t ID = 1588959934; + + using ReturnType = object_ptr; + + void store(TlStorerToString &s, const char *field_name) const final; +}; + class chatFolderInviteLinkInfo; class checkChatFolderInviteLink final : public Function { @@ -47427,6 +47504,32 @@ class setAuthenticationPhoneNumber final : public Function { void store(TlStorerToString &s, const char *field_name) const final; }; +class StoreTransaction; + +class ok; + +class setAuthenticationPremiumPurchaseTransaction final : public Function { + std::int32_t get_id() const final { + return ID; + } + + public: + object_ptr transaction_; + bool is_restore_; + string currency_; + int53 amount_; + + setAuthenticationPremiumPurchaseTransaction(); + + setAuthenticationPremiumPurchaseTransaction(object_ptr &&transaction_, bool is_restore_, string const ¤cy_, int53 amount_); + + static const std::int32_t ID = -450986887; + + using ReturnType = object_ptr; + + void store(TlStorerToString &s, const char *field_name) const final; +}; + class NetworkType; class autoDownloadSettings; diff --git a/third-party/td/TdBinding/SharedHeaders/td/td/generate/auto/td/telegram/td_api_json.h b/third-party/td/TdBinding/SharedHeaders/td/td/generate/auto/td/telegram/td_api_json.h index 57bb033989..52d31007d5 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/td/generate/auto/td/telegram/td_api_json.h +++ b/third-party/td/TdBinding/SharedHeaders/td/td/generate/auto/td/telegram/td_api_json.h @@ -8,9 +8,9 @@ namespace td { namespace td_api { -void to_json(JsonValueScope &jv, const tl_object_ptr &value); +void to_json(JsonValueScope &jv, const td_api::object_ptr &value); -Status from_json(tl_object_ptr &to, td::JsonValue from); +Status from_json(td_api::object_ptr &to, td::JsonValue from); void to_json(JsonValueScope &jv, const Object &object); @@ -166,6 +166,8 @@ Result tl_constructor_from_string(td_api::StickerType *object, const std: Result tl_constructor_from_string(td_api::StorePaymentPurpose *object, const std::string &str); +Result tl_constructor_from_string(td_api::StoreTransaction *object, const std::string &str); + Result tl_constructor_from_string(td_api::StoryList *object, const std::string &str); Result tl_constructor_from_string(td_api::StoryPrivacySettings *object, const std::string &str); @@ -1294,6 +1296,10 @@ Status from_json(td_api::storePaymentPurposeStars &to, JsonObject &from); Status from_json(td_api::storePaymentPurposeGiftedStars &to, JsonObject &from); +Status from_json(td_api::storeTransactionAppStore &to, JsonObject &from); + +Status from_json(td_api::storeTransactionGooglePlay &to, JsonObject &from); + Status from_json(td_api::storyAreaPosition &to, JsonObject &from); Status from_json(td_api::storyFullId &to, JsonObject &from); @@ -1580,9 +1586,7 @@ Status from_json(td_api::answerWebAppQuery &to, JsonObject &from); Status from_json(td_api::applyPremiumGiftCode &to, JsonObject &from); -Status from_json(td_api::assignAppStoreTransaction &to, JsonObject &from); - -Status from_json(td_api::assignGooglePlayTransaction &to, JsonObject &from); +Status from_json(td_api::assignStoreTransaction &to, JsonObject &from); Status from_json(td_api::banChatMember &to, JsonObject &from); @@ -1622,6 +1626,8 @@ Status from_json(td_api::checkAuthenticationPassword &to, JsonObject &from); Status from_json(td_api::checkAuthenticationPasswordRecoveryCode &to, JsonObject &from); +Status from_json(td_api::checkAuthenticationPremiumPurchase &to, JsonObject &from); + Status from_json(td_api::checkChatFolderInviteLink &to, JsonObject &from); Status from_json(td_api::checkChatInviteLink &to, JsonObject &from); @@ -2800,6 +2806,8 @@ Status from_json(td_api::setAuthenticationEmailAddress &to, JsonObject &from); Status from_json(td_api::setAuthenticationPhoneNumber &to, JsonObject &from); +Status from_json(td_api::setAuthenticationPremiumPurchaseTransaction &to, JsonObject &from); + Status from_json(td_api::setAutoDownloadSettings &to, JsonObject &from); Status from_json(td_api::setAutosaveSettings &to, JsonObject &from); @@ -3264,6 +3272,8 @@ void to_json(JsonValueScope &jv, const td_api::authorizationStateWaitTdlibParame void to_json(JsonValueScope &jv, const td_api::authorizationStateWaitPhoneNumber &object); +void to_json(JsonValueScope &jv, const td_api::authorizationStateWaitPremiumPurchase &object); + void to_json(JsonValueScope &jv, const td_api::authorizationStateWaitEmailAddress &object); void to_json(JsonValueScope &jv, const td_api::authorizationStateWaitEmailCode &object); @@ -6140,6 +6150,8 @@ void to_json(JsonValueScope &jv, const td_api::updateQuickReplyShortcutMessages void to_json(JsonValueScope &jv, const td_api::updateForumTopicInfo &object); +void to_json(JsonValueScope &jv, const td_api::updateForumTopic &object); + void to_json(JsonValueScope &jv, const td_api::updateScopeNotificationSettings &object); void to_json(JsonValueScope &jv, const td_api::updateReactionNotificationSettings &object); diff --git a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/AuthManager.h b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/AuthManager.h index 8113c8c73e..5c38fe23f5 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/AuthManager.h +++ b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/AuthManager.h @@ -33,31 +33,57 @@ class AuthManager final : public NetActor { } bool is_authorized() const; + bool was_authorized() const; + void get_state(uint64 query_id); void set_phone_number(uint64 query_id, string phone_number, td_api::object_ptr settings); + + void check_premium_purchase(uint64 query_id, string currency, int64 amount); + + void set_premium_purchase_transaction(uint64 query_id, td_api::object_ptr &&transaction, + bool is_restore, string currency, int64 amount); + void set_firebase_token(uint64 query_id, string token); + void report_missing_code(uint64 query_id, string mobile_network_code); + void set_email_address(uint64 query_id, string email_address); + void resend_authentication_code(uint64 query_id, td_api::object_ptr &&reason); + void check_email_code(uint64 query_id, EmailVerification &&code); + void reset_email_address(uint64 query_id); + void check_code(uint64 query_id, string code); + void register_user(uint64 query_id, string first_name, string last_name, bool disable_notification); + void request_qr_code_authentication(uint64 query_id, vector other_user_ids); + void check_bot_token(uint64 query_id, string bot_token); + void check_password(uint64 query_id, string password); + void request_password_recovery(uint64 query_id); + void check_password_recovery_code(uint64 query_id, string code); + void recover_password(uint64 query_id, string code, string new_password, string new_hint); + void log_out(uint64 query_id); + void delete_account(uint64 query_id, string reason, string password); void on_update_login_token(); + void on_update_sent_code(telegram_api::object_ptr &&sent_code_ptr); + void on_authorization_lost(string source); + void on_closing(bool destroy_flag); // can return nullptr if state isn't initialized yet @@ -69,6 +95,7 @@ class AuthManager final : public NetActor { enum class State : int32 { None, WaitPhoneNumber, + WaitPremiumPurchase, WaitCode, WaitQrCodeConfirmation, WaitPassword, @@ -86,6 +113,8 @@ class AuthManager final : public NetActor { SignIn, SignUp, SendCode, + CheckPremiumPurchase, + SetPremiumPurchaseTransaction, SendEmailCode, VerifyEmailAddress, ResetEmailAddress, @@ -133,6 +162,9 @@ class AuthManager final : public NetActor { int32 api_id_; string api_hash_; + // State::WaitPremiumPurchase + string store_product_id_; + // State::WaitEmailAddress bool allow_apple_id_ = false; bool allow_google_id_ = false; @@ -204,6 +236,8 @@ class AuthManager final : public NetActor { void on_sent_code(telegram_api::object_ptr &&sent_code_ptr); void on_send_code_result(NetQueryPtr &&net_query); + void on_check_premium_purchase_result(NetQueryPtr &&net_query); + void on_set_premium_purchase_transaction_result(NetQueryPtr &&net_query); void on_send_email_code_result(NetQueryPtr &&net_query); void on_verify_email_address_result(NetQueryPtr &&net_query); void on_reset_email_address_result(NetQueryPtr &&net_query); diff --git a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/BusinessConnectionManager.h b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/BusinessConnectionManager.h index 35c17c170c..093ad99bc1 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/BusinessConnectionManager.h +++ b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/BusinessConnectionManager.h @@ -222,8 +222,9 @@ class BusinessConnectionManager final : public Actor { void do_send_message_album(int64 request_id, BusinessConnectionId business_connection_id, DialogId dialog_id, MessageInputReplyTo &&input_reply_to, bool disable_notification, bool protect_content, - MessageEffectId effect_id, vector &&message_contents, - Promise> &&promise); + MessageEffectId effect_id, vector &&message_contents); + + void fail_send_message_album(int64 request_id, Status error); void on_upload_message_album_media(int64 request_id, size_t media_pos, Result &&result); diff --git a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/CallActor.h b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/CallActor.h index 801c90bdea..3a9a2e250b 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/CallActor.h +++ b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/CallActor.h @@ -183,7 +183,7 @@ class CallActor final : public NetQueryCallback { Status do_update_call(const telegram_api::phoneCallWaiting &call); Status do_update_call(const telegram_api::phoneCallRequested &call); Status do_update_call(const telegram_api::phoneCallAccepted &call); - Status do_update_call(const telegram_api::phoneCall &call); + Status do_update_call(telegram_api::phoneCall &call); Status do_update_call(const telegram_api::phoneCallDiscarded &call); void on_get_call_id(); diff --git a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/DialogDate.h b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/DialogDate.h index 9bbc37c170..0feb12936e 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/DialogDate.h +++ b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/DialogDate.h @@ -45,15 +45,24 @@ class DialogDate { int64 get_order() const { return order; } + DialogId get_dialog_id() const { return dialog_id; } + int32 get_date() const { return static_cast((order >> 32) & 0x7FFFFFFF); } + MessageId get_message_id() const { return MessageId(ServerMessageId(static_cast(order & 0x7FFFFFFF))); } + + static int64 get_dialog_order(MessageId message_id, int32 message_date) { + CHECK(!message_id.is_scheduled()); + return (static_cast(message_date) << 32) + + message_id.get_prev_server_message_id().get_server_message_id().get(); + } }; const DialogDate MIN_DIALOG_DATE(std::numeric_limits::max(), DialogId()); diff --git a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/DialogInviteLinkManager.h b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/DialogInviteLinkManager.h index cfddc57175..f3a44f3997 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/DialogInviteLinkManager.h +++ b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/DialogInviteLinkManager.h @@ -117,7 +117,7 @@ class DialogInviteLinkManager final : public Actor { vector participant_user_ids; string description; StarSubscriptionPricing subscription_pricing; - int64 subscription_form_id; + int64 subscription_form_id = 0; CustomEmojiId bot_verification_icon; bool creates_join_request = false; bool can_refulfill_subscription = false; diff --git a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/ForumTopic.h b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/ForumTopic.h index 421b12b75c..7f4c314ace 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/ForumTopic.h +++ b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/ForumTopic.h @@ -32,6 +32,8 @@ class ForumTopic { DialogNotificationSettings notification_settings_; unique_ptr draft_message_; + int64 get_forum_topic_order(Td *td, DialogId dialog_id) const; + public: ForumTopic() = default; @@ -65,6 +67,9 @@ class ForumTopic { td_api::object_ptr get_forum_topic_object(Td *td, DialogId dialog_id, const ForumTopicInfo &info) const; + td_api::object_ptr get_update_forum_topic_object(Td *td, DialogId dialog_id, + MessageId top_thread_message_id) const; + template void store(StorerT &storer) const; diff --git a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/ForumTopicInfo.h b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/ForumTopicInfo.h index 3573ec5922..f9f9b3874c 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/ForumTopicInfo.h +++ b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/ForumTopicInfo.h @@ -78,7 +78,7 @@ class ForumTopicInfo { bool apply_edited_data(const ForumTopicEditedData &edited_data); - td_api::object_ptr get_forum_topic_info_object(Td *td) const; + td_api::object_ptr get_forum_topic_info_object(Td *td, DialogId dialog_id) const; template void store(StorerT &storer) const; diff --git a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/ForumTopicManager.h b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/ForumTopicManager.h index d92e02d2ff..7570376046 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/ForumTopicManager.h +++ b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/ForumTopicManager.h @@ -177,11 +177,18 @@ class ForumTopicManager final : public Actor { void on_delete_forum_topic(DialogId dialog_id, MessageId top_thread_message_id, Promise &&promise); - td_api::object_ptr get_update_forum_topic_info(DialogId dialog_id, - const ForumTopicInfo *topic_info) const; + td_api::object_ptr get_update_forum_topic_info_object( + DialogId dialog_id, const ForumTopicInfo *topic_info) const; void send_update_forum_topic_info(DialogId dialog_id, const ForumTopicInfo *topic_info) const; + td_api::object_ptr get_update_forum_topic_object(DialogId dialog_id, + const Topic *topic) const; + + void send_update_forum_topic(DialogId dialog_id, const Topic *topic) const; + + void on_forum_topic_changed(DialogId dialog_id, Topic *topic); + void save_topic_to_database(DialogId dialog_id, const Topic *topic); void delete_topic_from_database(DialogId dialog_id, MessageId top_thread_message_id, Promise &&promise); diff --git a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/MessageContent.h b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/MessageContent.h index d379c04819..fe3ac2e038 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/MessageContent.h +++ b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/MessageContent.h @@ -87,8 +87,8 @@ struct InputMessageContent { struct InlineMessageContent { unique_ptr message_content; unique_ptr message_reply_markup; - bool disable_web_page_preview; - bool invert_media; + bool disable_web_page_preview = false; + bool invert_media = false; }; void store_message_content(const MessageContent *content, LogEventStorerCalcLength &storer); diff --git a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/MessagesManager.h b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/MessagesManager.h index 1249dd2fb6..8b13dd1837 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/MessagesManager.h +++ b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/MessagesManager.h @@ -533,6 +533,8 @@ class MessagesManager final : public Actor { vector sort_dialogs_by_order(const vector &dialog_ids, int32 limit) const; + int64 get_message_order(DialogId dialog_id, MessageId message_id) const; + void block_message_sender_from_replies(MessageId message_id, bool need_delete_message, bool need_delete_all_messages, bool report_spam, Promise &&promise); @@ -562,10 +564,10 @@ class MessagesManager final : public Actor { void get_messages(DialogId dialog_id, const vector &message_ids, Promise &&promise); void get_message_from_server(MessageFullId message_full_id, Promise &&promise, const char *source, - tl_object_ptr input_message = nullptr); + telegram_api::object_ptr input_message = nullptr); void get_messages_from_server(vector &&message_ids, Promise &&promise, const char *source, - tl_object_ptr input_message = nullptr); + telegram_api::object_ptr input_message = nullptr); void get_message_properties(DialogId dialog_id, MessageId message_id, Promise> &&promise); @@ -1816,9 +1818,9 @@ class MessagesManager final : public Actor { bool drop_author = false; bool drop_media_captions = false; - Dialog *from_dialog; + Dialog *from_dialog = nullptr; MessageId top_thread_message_id; - Dialog *to_dialog; + Dialog *to_dialog = nullptr; MessageSendOptions message_send_options; }; @@ -2841,8 +2843,6 @@ class MessagesManager final : public Actor { static NotificationInfo *add_dialog_notification_info(Dialog *d); - static int64 get_dialog_order(MessageId message_id, int32 message_date); - bool is_dialog_sponsored(const Dialog *d) const; int64 get_dialog_base_order(const Dialog *d) const; @@ -3255,9 +3255,9 @@ class MessagesManager final : public Actor { struct GetDialogsTask { DialogListId dialog_list_id; - int64 dialog_list_unique_id; - int32 limit; - int32 retry_count; + int64 dialog_list_unique_id = 0; + int32 limit = 0; + int32 retry_count = 5; DialogDate last_dialog_date = MIN_DIALOG_DATE; Promise> promise; }; diff --git a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/PhoneNumberManager.h b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/PhoneNumberManager.h index 201ba0cf39..92495e2cde 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/PhoneNumberManager.h +++ b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/PhoneNumberManager.h @@ -38,7 +38,7 @@ class PhoneNumberManager final : public Actor { void check_code(string code, Promise &&promise); private: - enum class Type : int32 { ChangePhone, VerifyPhone, ConfirmPhone }; + enum class Type : int32 { None, ChangePhone, VerifyPhone, ConfirmPhone }; enum class State : int32 { Ok, WaitCode } state_ = State::Ok; void tear_down() final; @@ -56,7 +56,7 @@ class PhoneNumberManager final : public Actor { Td *td_; ActorShared<> parent_; - Type type_; + Type type_ = Type::None; SendCodeHelper send_code_helper_; int64 generation_ = 0; }; diff --git a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/Premium.h b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/Premium.h index 42a0e02e31..f701ec9424 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/Premium.h +++ b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/Premium.h @@ -67,11 +67,7 @@ void get_premium_giveaway_info(Td *td, MessageFullId message_full_id, void can_purchase_premium(Td *td, td_api::object_ptr &&purpose, Promise &&promise); -void assign_app_store_transaction(Td *td, const string &receipt, - td_api::object_ptr &&purpose, Promise &&promise); - -void assign_play_market_transaction(Td *td, const string &package_name, const string &store_product_id, - const string &purchase_token, - td_api::object_ptr &&purpose, Promise &&promise); +void assign_store_transaction(Td *td, td_api::object_ptr &&transaction, + td_api::object_ptr &&purpose, Promise &&promise); } // namespace td diff --git a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/Requests.h b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/Requests.h index e0c5f5b932..ab24df836d 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/Requests.h +++ b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/Requests.h @@ -105,6 +105,10 @@ class Requests { void on_request(uint64 id, td_api::setAuthenticationPhoneNumber &request); + void on_request(uint64 id, td_api::checkAuthenticationPremiumPurchase &request); + + void on_request(uint64 id, td_api::setAuthenticationPremiumPurchaseTransaction &request); + void on_request(uint64 id, td_api::sendAuthenticationFirebaseSms &request); void on_request(uint64 id, td_api::reportAuthenticationCodeMissing &request); @@ -1661,9 +1665,7 @@ class Requests { void on_request(uint64 id, td_api::canPurchaseFromStore &request); - void on_request(uint64 id, td_api::assignAppStoreTransaction &request); - - void on_request(uint64 id, td_api::assignGooglePlayTransaction &request); + void on_request(uint64 id, td_api::assignStoreTransaction &request); void on_request(uint64 id, const td_api::getBusinessFeatures &request); diff --git a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/UpdatesManager.h b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/UpdatesManager.h index 25cdb4db65..f7a1ccae95 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/UpdatesManager.h +++ b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/UpdatesManager.h @@ -642,6 +642,8 @@ class UpdatesManager final : public Actor { void on_update(tl_object_ptr update, Promise &&promise); + void on_update(tl_object_ptr update, Promise &&promise); + void on_update(tl_object_ptr update, Promise &&promise); void on_update(tl_object_ptr update, Promise &&promise); void on_update(tl_object_ptr update, Promise &&promise); @@ -704,8 +706,6 @@ class UpdatesManager final : public Actor { // unsupported updates void on_update(tl_object_ptr update, Promise &&promise); - - void on_update(tl_object_ptr update, Promise &&promise); }; } // namespace td diff --git a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/UserManager.h b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/UserManager.h index 4c771840aa..21fe919dd7 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/UserManager.h +++ b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/UserManager.h @@ -239,14 +239,14 @@ class UserManager final : public Actor { struct BotData { string username; - bool can_be_edited; - bool can_join_groups; - bool can_read_all_group_messages; - bool has_main_app; - bool is_inline; - bool is_business; - bool need_location; - bool can_be_added_to_attach_menu; + bool can_be_edited = false; + bool can_join_groups = false; + bool can_read_all_group_messages = false; + bool has_main_app = false; + bool is_inline = false; + bool is_business = false; + bool need_location = false; + bool can_be_added_to_attach_menu = false; }; Result get_bot_data(UserId user_id) const TD_WARN_UNUSED_RESULT; diff --git a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/net/ConnectionCreator.h b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/net/ConnectionCreator.h index 5c45f325b1..2083c4142c 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/net/ConnectionCreator.h +++ b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/net/ConnectionCreator.h @@ -180,7 +180,7 @@ class ConnectionCreator final : public NetQueryCallback { struct TestProxyRequest { Proxy proxy_; - int16 dc_id_; + int16 dc_id_ = -1; ActorOwn<> child_; Promise promise_; diff --git a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/net/DcAuthManager.h b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/net/DcAuthManager.h index 2f57cf4052..d036fda700 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/net/DcAuthManager.h +++ b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/net/DcAuthManager.h @@ -38,7 +38,7 @@ class DcAuthManager final : public NetQueryCallback { struct DcInfo { DcId dc_id; std::shared_ptr shared_auth_data; - AuthKeyState auth_key_state; + AuthKeyState auth_key_state = AuthKeyState::Empty; enum class State : int32 { Waiting, Export, Import, BeforeOk, Ok }; State state = State::Waiting; diff --git a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/net/Session.h b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/net/Session.h index a557ffb1ac..9c1e9ccb2d 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/td/telegram/net/Session.h +++ b/third-party/td/TdBinding/SharedHeaders/td/td/telegram/net/Session.h @@ -162,7 +162,7 @@ class Session final double created_at_ = 0; }; - ConnectionInfo *current_info_; + ConnectionInfo *current_info_ = nullptr; ConnectionInfo main_connection_; ConnectionInfo long_poll_connection_; mtproto::ConnectionManager::ConnectionToken connection_token_; @@ -195,7 +195,7 @@ class Session final enum HandshakeId : int32 { MainAuthKeyHandshake = 0, TmpAuthKeyHandshake = 1 }; std::array handshake_info_; - double wakeup_at_; + double wakeup_at_ = 0.0; // mtproto::AuthData should be the last field, because it's size is about 32 KB mtproto::AuthData auth_data_; diff --git a/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/Blockchain.h b/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/Blockchain.h index 89a2f1176e..fad35e91ef 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/Blockchain.h +++ b/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/Blockchain.h @@ -320,6 +320,9 @@ class ClientBlockchain { td::UInt256 get_last_block_hash() const { return blockchain_.last_block_hash_; } + td::UInt256 get_previous_block_hash() const { + return blockchain_.last_block_.prev_block_hash_; + } td::Status add_proof(td::Slice proof); diff --git a/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/Call.h b/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/Call.h index 9ed7a98696..4e55d0d4a8 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/Call.h +++ b/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/Call.h @@ -55,7 +55,7 @@ struct CallVerificationChain { friend td::StringBuilder &operator<<(td::StringBuilder &sb, const CallVerificationChain &chain); private: - td::Status process_broadcast(std::string message, e2e::object_ptr broadcast); + td::Status process_broadcast(td::Slice message, e2e::object_ptr broadcast); td::Status process_broadcast(e2e::e2e_chain_groupBroadcastNonceCommit &nonce_commit); td::Status process_broadcast(e2e::e2e_chain_groupBroadcastNonceReveal &nonce_reveal); @@ -88,11 +88,11 @@ struct CallVerificationChain { class CallEncryption { public: CallEncryption(td::int64 user_id, PrivateKey private_key); - td::Status add_shared_key(td::int32 epoch, td::SecureString key, GroupStateRef group_state); - void forget_shared_key(td::int32 epoch); + td::Status add_shared_key(td::int32 epoch, td::UInt256 epoch_hash, td::SecureString key, GroupStateRef group_state); + void forget_shared_key(td::int32 epoch, td::UInt256 epoch_hash); - td::Result decrypt(td::int64 expected_user_id, td::int32 expected_channel_id, td::Slice encrypted_data); - td::Result encrypt(td::int32 channel_id, td::Slice decrypted_data); + td::Result decrypt(td::int64 expected_user_id, td::int32 expected_channel_id, td::Slice packet); + td::Result encrypt(td::int32 channel_id, td::Slice data, size_t unencrypted_header_length); private: static constexpr double FORGET_EPOCH_DELAY = 10; @@ -101,11 +101,17 @@ class CallEncryption { PrivateKey private_key_; struct EpochInfo { - EpochInfo(td::int32 epoch, td::int64 user_id, td::SecureString secret, GroupStateRef group_state) - : epoch_(epoch), user_id_(user_id), secret_(std::move(secret)), group_state_(std::move(group_state)) { + EpochInfo(td::int32 epoch, td::UInt256 epoch_hash, td::int64 user_id, td::SecureString secret, + GroupStateRef group_state) + : epoch_(epoch) + , epoch_hash_(epoch_hash) + , user_id_(user_id) + , secret_(std::move(secret)) + , group_state_(std::move(group_state)) { } td::int32 epoch_{}; + td::UInt256 epoch_hash_{}; td::int64 user_id_{}; td::SecureString secret_; GroupStateRef group_state_; @@ -113,6 +119,7 @@ class CallEncryption { std::map seqno_; std::map epochs_; + std::map epoch_by_hash_; td::VectorQueue> epochs_to_forget_; std::map, std::set> seen_; @@ -121,8 +128,9 @@ class CallEncryption { td::Result encrypt_packet_with_secret(td::int32 channel_id, td::Slice header, td::Slice packet, td::Slice one_time_secret); td::Result decrypt_packet_with_secret(td::int64 expected_user_id, td::int32 expected_channel_id, - td::Slice unencrypted_packet, td::Slice encrypted_packet, - td::Slice one_time_secret, const GroupStateRef &group_state); + td::Slice unencrypted_header, td::Slice unencrypted_prefix, + td::Slice encrypted_packet, td::Slice one_time_secret, + const GroupStateRef &group_state); td::Status check_not_seen(const PublicKey &public_key, td::int32 channel_id, td::uint32 seqno); void mark_as_seen(const PublicKey &public_key, td::int32 channel_id, td::uint32 seqno); static td::Status validate_channel_id(td::int32 channel_id); @@ -182,9 +190,9 @@ struct Call { TRY_STATUS(get_status()); return call_encryption_.decrypt(user_id, channel_id, encrypted_data); } - td::Result encrypt(td::int32 channel_id, td::Slice decrypted_data) { + td::Result encrypt(td::int32 channel_id, td::Slice decrypted_data, size_t unencrypted_prefix_size) { TRY_STATUS(get_status()); - return call_encryption_.encrypt(channel_id, decrypted_data); + return call_encryption_.encrypt(channel_id, decrypted_data, unencrypted_prefix_size); } td::Result> pull_outbound_messages() { diff --git a/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/Container.h b/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/Container.h index 01d1be1fb9..4dac96fd40 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/Container.h +++ b/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/Container.h @@ -165,10 +165,10 @@ class Container { auto id = next_id.fetch_add(1, std::memory_order_relaxed); if constexpr (TI::is_mutable) { auto value_ptr = std::make_shared>(std::move(value)); - storage.values.emplace(id, std::move(o_hash), value_ptr); + storage.values.emplace(id, o_hash, value_ptr); } else { auto value_ptr = std::make_shared(std::move(value)); - storage.values.emplace(id, std::move(o_hash), value_ptr); + storage.values.emplace(id, o_hash, value_ptr); } if constexpr (TI::has_hash) { @@ -243,6 +243,7 @@ td::Result> convert(SharedRef from) { } return td::Status::Error(static_cast(tde2e_api::ErrorCode::UnknownError), "TODO"); } + template td::Result> convert(UniqueRef from) { if (std::holds_alternative(*from)) { diff --git a/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/EncryptedStorage.h b/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/EncryptedStorage.h index 3c950f6045..b4781e62ff 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/EncryptedStorage.h +++ b/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/EncryptedStorage.h @@ -365,7 +365,7 @@ struct EncryptedStorage { // current blockchain height td::int64 get_height() const; - // one must only apply blocks from server (TODO: signature from server) + // one should only apply blocks from server (TODO: signature from server?) td::Result apply_block(td::Slice block); // proof must be from block of current height diff --git a/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/MessageEncryption.h b/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/MessageEncryption.h index aac7090d51..34e7f4c81b 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/MessageEncryption.h +++ b/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/MessageEncryption.h @@ -10,14 +10,19 @@ #include "td/utils/SharedSlice.h" #include "td/utils/Slice.h" #include "td/utils/Status.h" +#include "td/utils/UInt.h" namespace tde2e_core { class MessageEncryption { public: - static td::SecureString encrypt_data(td::Slice data, td::Slice secret); - static td::Result decrypt_data(td::Slice encrypted_data, td::Slice secret); + static td::SecureString encrypt_data(td::Slice data, td::Slice secret, td::Slice additional_data = {}, + td::UInt256 *save_large_msg_id = nullptr); + static td::Result decrypt_data(td::Slice encrypted_data, td::Slice secret, + td::Slice additional_data = {}, + td::UInt256 *save_large_msg_id = nullptr); static td::SecureString hmac_sha512(td::Slice key, td::Slice message); + static td::SecureString hmac_sha256(td::Slice key, td::Slice message); static td::SecureString kdf(td::Slice secret, td::Slice password, int iterations); static td::Result encrypt_header(td::Slice decrypted_header, td::Slice encrypted_message, td::Slice secret); @@ -29,7 +34,8 @@ class MessageEncryption { static td::SecureString gen_random_prefix(td::int64 data_size, td::int64 min_padding); static td::SecureString gen_deterministic_prefix(td::int64 data_size, td::int64 min_padding); - static td::SecureString encrypt_data_with_prefix(td::Slice data, td::Slice secret); + static td::SecureString encrypt_data_with_prefix(td::Slice data, td::Slice secret, td::Slice additional_data = {}, + td::UInt256 *save_large_msg_id = nullptr); static td::SecureString kdf_expand(td::Slice random_secret, td::Slice info); diff --git a/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/TestBlockchain.h b/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/TestBlockchain.h index 85c51e13c8..41973e0a2f 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/TestBlockchain.h +++ b/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/TestBlockchain.h @@ -22,13 +22,16 @@ #include #include +// Define a custom verbosity name for blockchain-specific logging extern int VERBOSITY_NAME(blkch); + namespace tde2e_core { struct Height { td::int64 height; td::int64 broadcast_height; }; + // Simple blockchain operation logger that writes to a file class BlockchainLogger { public: @@ -57,8 +60,6 @@ class BlockchainLogger { std::string base64_encode(td::Slice data); }; -// Define a custom verbosity name for blockchain-specific logging - class ServerBlockchain { public: ServerBlockchain() = default; @@ -128,6 +129,7 @@ struct BlockBuilder { bool in_proof = true, td::int32 external_permissions = 0); BlockBuilder &skip_group_state_proof(); BlockBuilder &with_shared_key(const std::vector &user_ids, bool in_changes = true, bool in_proof = true); + BlockBuilder &with_shared_key(GroupSharedKeyRef shared_key, bool in_changes, bool in_proof); BlockBuilder &skip_shared_key_proof(); private: diff --git a/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/Trie.h b/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/Trie.h index 6c1246ebc0..b319006538 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/Trie.h +++ b/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/Trie.h @@ -80,16 +80,21 @@ struct TrieNode { }; td::Result set(const TrieRef &n, BitString key, td::Slice value, td::Slice snapshot = {}); + td::Result get(const TrieRef &n, const BitString &key, td::Slice snapshot = {}); + td::Result generate_pruned_tree(const TrieRef &n, td::Span keys, td::Slice snapshot = {}); std::ostream &operator<<(std::ostream &os, const td::UInt256 &hash); + void print_tree(const TrieRef &node, const std::string &prefix = "", bool is_root = true); BitString to_key(td::Slice key); + inline td::Result set(const TrieRef &n, td::Slice key, td::Slice value) { return set(n, to_key(key), value); } + inline td::Result get(const TrieRef &n, td::Slice key, td::Slice snapshot = {}) { return get(n, to_key(key), snapshot); } diff --git a/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/e2e_api.h b/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/e2e_api.h index 29b2a19b4a..7f70dd35c1 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/e2e_api.h +++ b/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/e2e_api.h @@ -175,7 +175,6 @@ Result login_destroy(LoginId login_id); Result login_destroy_all(); // Personal info -// TODO: UserId // 1. Each entry stored and signed separately // 2. Signature is never stored, but always is verified @@ -304,7 +303,8 @@ Result call_describe_block(Slice block); Result call_describe_message(Slice message); Result call_create_change_state_block(CallId call_id, const CallState &new_state); -Result call_encrypt(CallId call_id, CallChannelId channel_id, SecureSlice message); +Result call_encrypt(CallId call_id, CallChannelId channel_id, SecureSlice message, + size_t unencrypted_prefix_size); Result call_decrypt(CallId call_id, UserId user_id, CallChannelId channel_id, Slice message); Result call_get_height(CallId call_id); @@ -329,7 +329,9 @@ struct CallVerificationWords { int height{}; std::vector words; }; + Result call_get_verification_words(CallId call_id); Result call_destroy(CallId call_id); Result call_destroy_all(); + } // namespace tde2e_api diff --git a/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/e2e_errors.h b/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/e2e_errors.h index 6863114182..66735716ec 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/e2e_errors.h +++ b/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/e2e_errors.h @@ -25,6 +25,7 @@ enum class ErrorCode : int { InvalidBlock_InvalidStateProof_Secret = 206, InvalidBlock_NoPermissions = 207, InvalidBlock_InvalidGroupState = 208, + InvalidBlock_InvalidSharedSecret = 209, InvalidCallGroupState_NotParticipant = 300, InvalidCallGroupState_WrongUserId = 301, Decrypt_UnknownEpoch = 400, @@ -37,7 +38,8 @@ enum class ErrorCode : int { InvalidBroadcast_InvalidReveal = 505, InvalidBroadcast_InvalidBlockHash = 506, InvalidCallChannelId = 600, - CallFailed = 601 + CallFailed = 601, + CallKeyAlreadyUsed = 602 }; inline std::string_view error_string(ErrorCode error_code) { switch (error_code) { @@ -67,6 +69,8 @@ inline std::string_view error_string(ErrorCode error_code) { return "INVALID_BLOCK__INVALID_STATE_PROOF__SECRET"; case ErrorCode::InvalidBlock_InvalidGroupState: return "INVALID_BLOCK__INVALID_GROUP_STATE"; + case ErrorCode::InvalidBlock_InvalidSharedSecret: + return "INVALID_BLOCK__INVALID_SHARED_SECRET"; case ErrorCode::InvalidBlock_NoPermissions: return "INVALID_BLOCK__NO_PERMISSIONS"; case ErrorCode::InvalidCallGroupState_NotParticipant: @@ -93,6 +97,8 @@ inline std::string_view error_string(ErrorCode error_code) { return "INVALID_BROADCAST__INVALID_BLOCK_HASH"; case ErrorCode::CallFailed: return "CALL_FAILED"; + case ErrorCode::CallKeyAlreadyUsed: + return "CALL_KEY_ALREADY_USED"; case ErrorCode::InvalidCallChannelId: return "INVALID_CALL_CHANNEL_ID"; } diff --git a/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/utils.h b/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/utils.h index 2b9e8300c5..6286973404 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/utils.h +++ b/third-party/td/TdBinding/SharedHeaders/td/tde2e/td/e2e/utils.h @@ -23,7 +23,9 @@ #include #include + namespace tde2e_api { + inline Error to_error(const td::Status &status) { auto error_code = ErrorCode(status.code()); if (error_string(error_code) == "UNKNOWN_ERROR") { @@ -39,6 +41,7 @@ Result to_result(td::Result &value) { } return Result(to_error(value.error())); } + template Result::Result(td::Result &&value) : Result(to_result(value)) { } @@ -50,11 +53,14 @@ Result::Result(td::Status &&status) : Result(to_error(status)) { } // namespace tde2e_api namespace tde2e_core { + using E = tde2e_api::ErrorCode; + inline td::Status Error(E error_code) { auto msg = tde2e_api::error_string(error_code); return td::Status::Error(static_cast(error_code), td::Slice(msg.data(), msg.size())); } + inline td::Status Error(E error_code, td::Slice message) { auto msg = tde2e_api::error_string(error_code); return td::Status::Error(static_cast(error_code), PSLICE() diff --git a/third-party/td/TdBinding/SharedHeaders/td/tde2e/test/EncryptionTestVectors.h b/third-party/td/TdBinding/SharedHeaders/td/tde2e/test/EncryptionTestVectors.h index 8c233e8848..98f23a198f 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/tde2e/test/EncryptionTestVectors.h +++ b/third-party/td/TdBinding/SharedHeaders/td/tde2e/test/EncryptionTestVectors.h @@ -15,6 +15,7 @@ struct TestVector { std::string name; std::string secret; std::string data; + std::string extra; std::string header; std::string encrypted; std::string encrypted_header; @@ -22,59 +23,65 @@ struct TestVector { inline std::vector get_test_vectors() { return { - {"empty_message", "5a08a19b447df98136a4502e01b286011b2d148084a7ca17e3a93616d279eb2a", "", - "a36c57ad5e8d6a30e80e010ab903b60da0206db1b4fd981cd61e059bbd8c0d4f", - "9e2476ad849d22a44d9135c5c3c5e8b52d4f88473ae8745f3a9cec4d54780caf", - "de3539a5e10b20a3a0cffc24dbbd76b3a7e0eeab402cb38396d64785a3ab7c25"}, - {"simple_message", "5a08a19b447df98136a4502e01b286011b2d148084a7ca17e3a93616d279eb2a", - "48656c6c6f2c20576f726c6421", "a36c57ad5e8d6a30e80e010ab903b60da0206db1b4fd981cd61e059bbd8c0d4f", - "872b141f6d1e3554ead471dffd0fee5c04a0b04260eafcca9187158ce84c4487e9429df876706753913de61029402478", - "013037e02dc8dbf13598d96eb333a69a930efe043bac7dce0d6edfd1abc6bd2f"}, - {"long_message", "5a08a19b447df98136a4502e01b286011b2d148084a7ca17e3a93616d279eb2a", + {"empty_message", "f9fb473b9887e50ea38eef7380c82361432cd4b22c5f9b3700809990d8ed344c", "", "", + "bd29703cf44551710ca14d091a6c98ee347931b2b8140faaaef2dbb40719df12", + "d28eb3e3d1328f06dafedabd67a353d5ea6e164d2f34c162a16f8a1164663a03", + "4060edd7bcacca6dd0f4fe81d6ec63a8859fa9d520598043bc4748919f3fdeda"}, + {"simple_message", "f9fb473b9887e50ea38eef7380c82361432cd4b22c5f9b3700809990d8ed344c", + "48656c6c6f2c20576f726c6421", "", "bd29703cf44551710ca14d091a6c98ee347931b2b8140faaaef2dbb40719df12", + "967f5245b03e07ab7be6044174306a4af811e96708ae3ad2ab427aa5495508b1c319ca0353531c0a2921e307f2455856", + "9e7910949e526b6ad51a59aad8022c826b00f379e28592ed3216aabc6be252e0"}, + {"long_message", "f9fb473b9887e50ea38eef7380c82361432cd4b22c5f9b3700809990d8ed344c", "787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787" "878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878" "787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787" "8787878787878787878787878787878787878787878787878787878787878787878", - "a36c57ad5e8d6a30e80e010ab903b60da0206db1b4fd981cd61e059bbd8c0d4f", - "0fd497802c755b9c6fb9d58d38b9fb5fbd7dc9ccf78af3eb003a22d46bfa38894135d976bbec0f3cadc2b61a4d8648120dada26b2c3153d" - "ef20fb9e370def31c802e202846946b5cb1bc2c01a7b46605292d6043ffb8f4040aaf18914e1c93fe9e683f088e23ee5e1551f00068a23f" - "a3ebb8d6b9dcbf7a9072b12323b1a64247ba9bc7d277b08cfcc37387a0d24afca170dc027d8f0212eb62bccd9555de98936047c9bfc6a03" - "aa539073f458795bd94b9b43003fe2299805f90c1d30ca631c8054242687e41e890bf4d744b529d7e96ea48a5bcec700993b5e980173049" - "cf9df6f93d62ccc06d933fd6d7063890fa2d", - "697558ba60e789622ee90dffc55f1f1148cfea568c573b257fcf2083cf8aad0a"}, - {"random_message", "5a08a19b447df98136a4502e01b286011b2d148084a7ca17e3a93616d279eb2a", - "e61d2b05302c49faa9fac6a893957a846a2b30801dc171cf62ffec92297b10bfc4a82445839ecb4c5800ffb37c5356d4b95fc565ddb2e7f" - "3e21f2936a952373c", - "a36c57ad5e8d6a30e80e010ab903b60da0206db1b4fd981cd61e059bbd8c0d4f", - "515f0223f27302ca5e952ec978ec66bcdf04e7f72ae3a8e011e21457b355891d12e158c9b2dfb921520a0e5f531e6a20e95d42635b084a0" - "b38a6e658f4a4181f85ea83756d316cea538cc34592491eef3e3530c34c63a693e3372cbdd0076628", - "b5bdfe6a3400c5d299d94756af4c18bbb8cca4a2635beeba3d89bbaa0025d9d3"}, - {"very_long_message", "5a08a19b447df98136a4502e01b286011b2d148084a7ca17e3a93616d279eb2a", - "de6e0dbde23e04b6be3d4c46868a1171c6b879227b19e370765823390501b195783c356af2156e828e511473d5698c9bd1cb4a70b7e209b" - "bb02f8dda044af02ab6869478b211e3a17d72fbe6289c1b2e6132cb141e89cf72cf70defd67a23fbfe8e718a09a9c6a345565ebdc73e1f5" - "9927744801eb4e6f0b30d2705ea181e02a4030252330ac73bc4a4d51d2ccafb2f3f62abe3e81163be325ac823571c8dfae739f70bff3916" - "4e3cec7f53b88f97735dc25ac0c0630b1b41a131a979ba5164ab92e103716e9096e2fb5a6434b31d2c3673fca7e54dcdcce3807bfd43ee7" - "bc3422868094305a9847ce7666bf57e49fb3c2009cb30eb3ba955942b923ec2c2a4e0341d86b524b198974bdce9cf863ab3526e9e03e533" - "99dad20fc218554567c440536a31e05573f4cb930ba6a", - "a36c57ad5e8d6a30e80e010ab903b60da0206db1b4fd981cd61e059bbd8c0d4f", - "e296a98cd96154b27d4b94cc520a8f028c61bd5ea69d22f0c3c13658c4bd5db0bd6661d0d17fac791c5cc06b3a54a853916bd7bf8a00644" - "acc53cca43b6f51c66bc6a6cb98cf8d9f23dcd639089d1d9d3dfbc8829a1a81638317bbd3edb070c1dae181d97605eb42a6111b8696a16c" - "c3e42639e38e93f872111fd67e934740f73a57df0e6edc6726c9aff99682bfcb7ddd99a3bef30da70d3c21e590fd02defc23be9f7f243e4" - "5a56b13562b8ecea09a14ac5af3a0500cb52f73f1bffea4a6624644da0bc4d112e5ee684b13a2ae8dbf401a5a8e581295a9dc876eaeb8ae" - "4d732fb78d50a92c302d15c0a2308e43fc6e147ec162b28a534d6c95a2020fa141f3ce7f7dd25ff000d35f732a145abf31b3ff4d0da015d" - "39da3b0fc70e692b567a9507be59e8c91a63fe809c495d76e70ec857cc24978771fc9314251e2bc4b1b24e0448514f97a6d438255cba8c1" - "854019", - "8dab56b50ce6a4315b6e0b4eb32c39dfe817cb462ee9e070e2a60bb843c16107"}, - {"message_with_special_chars", "5a08a19b447df98136a4502e01b286011b2d148084a7ca17e3a93616d279eb2a", - "2122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", - "a36c57ad5e8d6a30e80e010ab903b60da0206db1b4fd981cd61e059bbd8c0d4f", - "2014d1125081316a334896cbe5aed251d9fba6f3422afbc7e7bc9019e10e184241d18f71ef86603b5ce03e1c351e3dfff8adfb8f3498300" - "a712ec134b367c533", - "6f5a5de410db3606ff94fa14d0e084a6ba5a51241a2abf45ac593e4748c477ce"}, - {"message_with_unicode", "5a08a19b447df98136a4502e01b286011b2d148084a7ca17e3a93616d279eb2a", - "48656c6c6f2c20e4b896e7958c21", "a36c57ad5e8d6a30e80e010ab903b60da0206db1b4fd981cd61e059bbd8c0d4f", - "7ae70cb905f23109477b4d758d3907238ff4c37e2f351f086268ba3e85cef0257af58a70d8838c7b9c044f30382c2ccf", - "7dfb2d2e76df39b2fafdf01de009088a7e4d045b8630941986111ef2010d7c4a"}, + "", "bd29703cf44551710ca14d091a6c98ee347931b2b8140faaaef2dbb40719df12", + "8202a46a19de7111166f6c244127c84dbdc1c3a63ca6526dc699c6cbbc6f8236ee82a0172ed1115cb4a2ba8e27cfa8089822c7e9070ec2f" + "5c7cee77cc979447c1db9758119ad28a05b2edfc1c98b486985bb60fb6f1fefb4b5f7ecea19d59b8018f865a7be3771c7f6fe6092b34b78" + "a1bddefc8d07f2f61351a4247c41a58cb068ebe9110245de4fda076f0ff73aede4e9811678424f648b8054b921b53f0612dfbdb7173a86b" + "ce3eba73955afef435599ae34825d295e8d298d6d3a1fc07084740c0b1c3a24cebedbd26b631cbbd1a352c1a499ba3576a628a74ab14eb1" + "d180e5af7e9eac4020b889fafc4f7bfb2e24", + "641620351a1e4d76711385d5cf3b0eed07308c9cafc06ef09ed0c1f57ebb5f42"}, + {"random_message", "f9fb473b9887e50ea38eef7380c82361432cd4b22c5f9b3700809990d8ed344c", + "fed306c137017ab008c22d1f74bc104e5138d3c19b42fb303c768b083912a1102d06ac1e0f4440e3b32b9144a50e6fc0f190273bd4dec7e" + "f847bf7d46680bb67", + "736d616c6c206578747261", "bd29703cf44551710ca14d091a6c98ee347931b2b8140faaaef2dbb40719df12", + "ee198e4860c888ab18bcecba5083eb539f402be1fbde51e0c49e398145d40ebb7b5a52bdc83d6200e63a70c47cc6a5e6fa7a71f6e24b722" + "b5f0314b6b52768dbd2e438a582d1cf2a54d4de7ba30e36e68afd8379b63a345483dbcc33380fd07f", + "f282da8a41f17a5fa7f793c6c134c5bb2b960a2fea43bdc15b58a69cb7dafb43"}, + {"very_long_message", "f9fb473b9887e50ea38eef7380c82361432cd4b22c5f9b3700809990d8ed344c", + "d16554889d83850ffb42d119e0c69d8b68ee07ff021f0a2cb7beb70d0b1cc62e3d8fe2dff95e674893393b5da015a965108c785d8935a3e" + "e58e3df9505016020b558687ee535f9bcfa94450ded18ac3e8145879af43e66eeacfee1d9f9c9c78824cf34639af50fb0b93de73aa9362c" + "f2732e2d8c652111ec1246c8ded3b19e93d154d04cc8a4bd927332136d7627e71e6be2c97dd62235dfd998d1e630588d10beeab791e0919" + "9bfa8bab3b9e6dbcdfba9f9dd76110f7f6c7fd1fbccc421e7ad093e8fd385e53e3c03f7f0a79296962de1e752eea5f8c5e6325ef406aef5" + "62d8ef0b9431defeb46fb93ee3c3409af0e3a4f7e63af4efbfb5f4b61a104c1158247877a28f9538d6cf8c5e243ece977cc2a0a0bcf602c" + "d16df445cb71a4f6a0494a3b6a1149725c169dc40eb10", + "ebc6b1176ca69b8bb769bcc68add44fbba1c79d2771ef412eccad3ee4f7afe595f8fd2052f8d1d8b8fea209c568eb6a4c6aea6d88c583df" + "25ed3f38260c2f95c1f0244219d55e658498b34f7e7a527c60723b6806fe28275337b0c9b64c158825a3c14d8cec6a40bbf8c5a5a8009ca" + "75f2c6f2e7f3ab612ff5d675f2c3b801d4d4e0408b49d8543d8621de0df26a65a49d1fc7a21584d5495a24b2090479870e852766f6de34b" + "724e5941097d19153f4f4d035ae0c978ec6354ba452cf465581cd4afd7045bfa4c54383796587d19e981da220cd9ca5230161eaf64d8a1b" + "406a2f8afc7faeb0ec7634c3c14aa63736c955b56c48c61ba58b109775ac252f3837e8bcebdb40f4ca2ce32609619b0063cb421a268f80c" + "60ffc7c99963f74033d22283a6d2ab3095f65cb49a17e", + "bd29703cf44551710ca14d091a6c98ee347931b2b8140faaaef2dbb40719df12", + "c96e7fadcf4e51f5c0dc03aeed33352d7f984c2d49791d173caad17d724b98155ff6b3dc6e082b90063434e9f85941c085dd8573fb4f23d" + "d0867615249e8e8c567ba74d4e6739919c46afc0a6b19b26c0e37e1810952dcb859b8a2df9ed322da89c4e7821166939809d2561980ff77" + "d3b797f1ecb1ed78e39614e096c72bed4587ac3229929ae4e164da9b00323410f8b17abed5cc8455656ee73114119e20b529294f8c578f7" + "f9492327ff40f9f1255abe84f7445c87c8b048e98eac746f6d58fb3261f61eb039e5e88da46c9fc5e35baeb0c1180e9913f49ab7aac5f59" + "76be1e384071470d80ddbf77c52e781f954d77978697cf555d1586469ce21ccd45f43283eeec3b976d6bd897f436ef9ccacde5da73f298b" + "d1b99c10e988befeb2988f8f03f96215a746590d35ff0a6a85fa1102d63a00cd71e3cb80753bfe98bf6744f2aec697993dab51cce21f823" + "656870", + "97b6b5b2082a66182783c0be6940ca9d63e931195b6cc84dbf9158e9b39834ac"}, + {"message_with_special_chars", "f9fb473b9887e50ea38eef7380c82361432cd4b22c5f9b3700809990d8ed344c", + "2122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", "", + "bd29703cf44551710ca14d091a6c98ee347931b2b8140faaaef2dbb40719df12", + "b862c41221e3242c07c375dfded48e302aaebed7fbc91bbfe3b7c88345a58d3a13d83cfb87f08250b2d66f4590b5dd2bb2b08fabd4328d1" + "04f7b4e1bad80931c", + "7557d10f233e47a56f74a57458b5169e8cce5c4c98e3a3da02f6e49a3db4c2b3"}, + {"message_with_unicode", "f9fb473b9887e50ea38eef7380c82361432cd4b22c5f9b3700809990d8ed344c", + "48656c6c6f2c20e4b896e7958c21", "", "bd29703cf44551710ca14d091a6c98ee347931b2b8140faaaef2dbb40719df12", + "cb0d460ca3daf8e3fd5623965b39b5c1de840e92d39f6caf4662b7a7983c53b29fe644bf45acea2644507ac01f0617a2", + "ebe8636326b11d90f9a670e63086e2fcd02b78c0aa5cacdb4f887e511d1ae4c9"}, }; } diff --git a/third-party/td/TdBinding/SharedHeaders/td/tdutils/td/utils/ChainScheduler.h b/third-party/td/TdBinding/SharedHeaders/td/tdutils/td/utils/ChainScheduler.h index 9d6bce64fd..10dc961220 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/tdutils/td/utils/ChainScheduler.h +++ b/third-party/td/TdBinding/SharedHeaders/td/tdutils/td/utils/ChainScheduler.h @@ -138,7 +138,7 @@ class ChainScheduler final : public ChainSchedulerBase { struct Task { enum class State { Pending, Active, Paused } state{State::Pending}; vector chains; - ExtraT extra; + ExtraT extra{}; }; FlatHashMap> chains_; FlatHashMap limited_tasks_; diff --git a/third-party/td/TdBinding/SharedHeaders/td/tdutils/td/utils/ConcurrentHashTable.h b/third-party/td/TdBinding/SharedHeaders/td/tdutils/td/utils/ConcurrentHashTable.h index b7bad15a77..dab06fc61d 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/tdutils/td/utils/ConcurrentHashTable.h +++ b/third-party/td/TdBinding/SharedHeaders/td/tdutils/td/utils/ConcurrentHashTable.h @@ -209,12 +209,15 @@ class ConcurrentHashMap { int migrate_generation_{0}; HashMap *migrate_from_hash_map_{nullptr}; HashMap *migrate_to_hash_map_{nullptr}; + struct Task { size_t begin; size_t end; + bool empty() const { return begin >= end; } + size_t size() const { if (empty()) { return 0; @@ -224,9 +227,10 @@ class ConcurrentHashMap { }; struct TaskCreator { - size_t chunk_size; - size_t size; + size_t chunk_size{0}; + size_t size{0}; std::atomic pos{0}; + Task create() { auto i = pos++; auto begin = i * chunk_size; diff --git a/third-party/td/TdBinding/SharedHeaders/td/tdutils/td/utils/Ed25519.h b/third-party/td/TdBinding/SharedHeaders/td/tdutils/td/utils/Ed25519.h index ae9a5fa8b8..8b99a584a6 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/tdutils/td/utils/Ed25519.h +++ b/third-party/td/TdBinding/SharedHeaders/td/tdutils/td/utils/Ed25519.h @@ -12,6 +12,8 @@ #include "td/utils/Status.h" #include "td/utils/UInt.h" +#include + #if TD_HAVE_OPENSSL namespace td { @@ -45,7 +47,7 @@ class Ed25519 { } static Result from_slice(Slice slice) { - if (slice.size() != 32) { + if (slice.size() != LENGTH) { return Status::Error("Invalid slice size"); } return PublicKey(SecureString(slice)); @@ -65,18 +67,24 @@ class Ed25519 { SecureString octet_string_; }; + struct PreparedPrivateKey; + class PrivateKey { public: static constexpr size_t LENGTH = 32; explicit PrivateKey(SecureString octet_string); + Result> prepare() const; + SecureString as_octet_string() const; Result get_public_key() const; Result sign(Slice data) const; + static Result sign(const PreparedPrivateKey &prepared_private_key, Slice data); + Result as_pem(Slice password) const; static Result from_pem(Slice pem, Slice password); diff --git a/third-party/td/TdBinding/SharedHeaders/td/tdutils/td/utils/FlatHashMapChunks.h b/third-party/td/TdBinding/SharedHeaders/td/tdutils/td/utils/FlatHashMapChunks.h index 35a7aee6aa..97f822bd52 100644 --- a/third-party/td/TdBinding/SharedHeaders/td/tdutils/td/utils/FlatHashMapChunks.h +++ b/third-party/td/TdBinding/SharedHeaders/td/tdutils/td/utils/FlatHashMapChunks.h @@ -68,7 +68,7 @@ struct MaskPortable { static MaskIterator<1> equal_mask(uint8 *bytes, uint8 needle) { uint64 res = 0; for (int i = 0; i < 16; i++) { - res |= (bytes[i] == needle) << i; + res |= static_cast(bytes[i] == needle) << i; } return {res & ((1u << 14) - 1)}; }