mirror of
https://github.com/MarshalX/telegram-crawler.git
synced 2025-01-07 11:15:42 +01:00
Update content of files
This commit is contained in:
parent
687b1d2199
commit
092a5561b6
7 changed files with 225 additions and 216 deletions
|
@ -130,7 +130,10 @@ Use <a href="/method/messages.deleteExportedChatInvite">messages.deleteExportedC
|
|||
<a href='/method/payments.fulfillStarsSubscription'>payments.fulfillStarsSubscription</a>#cc5bebb3 peer:<a href='/type/InputPeer'>InputPeer</a> subscription_id:<a href='/type/string'>string</a> = <a href='/type/Bool'>Bool</a>;
|
||||
|
||||
<a href='/method/payments.getStarsSubscriptions'>payments.getStarsSubscriptions</a>#032512c5 flags:<a href='/type/%23'>#</a> missing_balance:flags.0?<a href='/constructor/true'>true</a> peer:<a href='/type/InputPeer'>InputPeer</a> offset:<a href='/type/string'>string</a> = <a href='/type/payments.StarsStatus'>payments.StarsStatus</a>;
|
||||
<a href='/method/payments.changeStarsSubscription'>payments.changeStarsSubscription</a>#c7770878 flags:<a href='/type/%23'>#</a> peer:<a href='/type/InputPeer'>InputPeer</a> subscription_id:<a href='/type/string'>string</a> canceled:flags.0?<a href='/type/Bool'>Bool</a> = <a href='/type/Bool'>Bool</a>;</code></pre>
|
||||
<a href='/method/payments.changeStarsSubscription'>payments.changeStarsSubscription</a>#c7770878 flags:<a href='/type/%23'>#</a> peer:<a href='/type/InputPeer'>InputPeer</a> subscription_id:<a href='/type/string'>string</a> canceled:flags.0?<a href='/type/Bool'>Bool</a> = <a href='/type/Bool'>Bool</a>;
|
||||
<a href='/method/payments.getStarsTransactions'>payments.getStarsTransactions</a>#69da4557 flags:<a href='/type/%23'>#</a> inbound:flags.0?<a href='/constructor/true'>true</a> outbound:flags.1?<a href='/constructor/true'>true</a> ascending:flags.2?<a href='/constructor/true'>true</a> subscription_id:flags.3?<a href='/type/string'>string</a> peer:<a href='/type/InputPeer'>InputPeer</a> offset:<a href='/type/string'>string</a> limit:<a href='/type/int'>int</a> = <a href='/type/payments.StarsStatus'>payments.StarsStatus</a>;
|
||||
|
||||
<a href='/method/messages.getChatInviteImporters'>messages.getChatInviteImporters</a>#df04dd4e flags:<a href='/type/%23'>#</a> requested:flags.0?<a href='/constructor/true'>true</a> subscription_expired:flags.3?<a href='/constructor/true'>true</a> peer:<a href='/type/InputPeer'>InputPeer</a> link:flags.1?<a href='/type/string'>string</a> q:flags.2?<a href='/type/string'>string</a> offset_date:<a href='/type/int'>int</a> offset_user:<a href='/type/InputUser'>InputUser</a> limit:<a href='/type/int'>int</a> = <a href='/type/messages.ChatInviteImporters'>messages.ChatInviteImporters</a>;</code></pre>
|
||||
<p>Channel administrators can create special invite links that allow joining a channel in exchange for a monthly payment in Telegram Stars. </p>
|
||||
<p>To create such links, invoke <a href="/method/messages.exportChatInvite">messages.exportChatInvite</a> passing a <a href="/constructor/starsSubscriptionPricing">starsSubscriptionPricing</a> constructor to <code>subscription_pricing</code>, passing in <code>peer</code> the <strong>private channel</strong> we wish to sell access to, and in <code>amount</code> the amount of Telegram Stars users should pay every <code>period</code> seconds to gain and maintain access to the channel.<br>
|
||||
Currently the only allowed subscription period is <code>30*24*60*60</code>, i.e. the user will be debited <code>amount</code> stars every month. </p>
|
||||
|
@ -142,6 +145,8 @@ Currently the only allowed subscription period is <code>30*24*60*60</code>, i.e.
|
|||
<p>To obtain a list of all active and cancelled subscriptions invoke <a href="/method/payments.getStarsSubscriptions">payments.getStarsSubscriptions</a>, passing <a href="/constructor/inputPeerSelf">inputPeerSelf</a> to <code>peer</code>: this will return a vector of <a href="/constructor/starsSubscription">starsSubscription</a> constructors, containing info about each subscription. </p>
|
||||
<p>To cancel an active subscription, invoke <a href="/method/payments.changeStarsSubscription">payments.changeStarsSubscription</a> passing <a href="/constructor/inputPeerSelf">inputPeerSelf</a> to <code>peer</code>, the <a href="/constructor/starsSubscription">starsSubscription</a>.<code>id</code> to <code>subscription_id</code> and <a href="/constructor/boolTrue">boolTrue</a> to <code>canceled</code>; to resubscribe, invoke the same method passing <a href="/constructor/boolFalse">boolFalse</a> to <code>canceled</code>. </p>
|
||||
<p>When we get close to the end of the subscription period of one or more active subscriptions, and the current Telegram Star balance is not high enough to autorenew at least one of them, the <a href="/api/config#suggestions">"STARS_SUBSCRIPTION_LOW_BALANCE" suggestion »</a> will be activated: when the user clicks on the suggestion, the client should fetch and display the list of expiring subscriptions by invoking <a href="/method/payments.getStarsSubscriptions">payments.getStarsSubscriptions</a>, passing <a href="/constructor/inputPeerSelf">inputPeerSelf</a> to <code>peer</code> and setting the <code>missing_balance</code> flag: the returned subscriptions may be renewed by <a href="/api/stars">filling up the current Telegram Star balance</a> with at least <a href="/constructor/payments.starsStatus">payments.starsStatus</a>.<code>subscriptions_missing_balance</code> stars.</p>
|
||||
<p><a href="/method/payments.getStarsTransactions">payments.getStarsTransactions</a> may be used to fetch only and all transactions for a specific subscription by populating the <code>subscription_id</code> flag. </p>
|
||||
<p>Admins may also use <a href="/method/messages.getChatInviteImporters">messages.getChatInviteImporters</a> with the <code>subscription_expired</code> flag set to fetch only and all users with an expired subscription. </p>
|
||||
<h3><a class="anchor" href="#join-requests" id="join-requests" name="join-requests"><i class="anchor-icon"></i></a>Join requests</h3>
|
||||
<pre><code><a href='/constructor/channel'>channel</a>#fe4478bd flags:<a href='/type/%23'>#</a> creator:flags.0?<a href='/constructor/true'>true</a> left:flags.2?<a href='/constructor/true'>true</a> broadcast:flags.5?<a href='/constructor/true'>true</a> verified:flags.7?<a href='/constructor/true'>true</a> megagroup:flags.8?<a href='/constructor/true'>true</a> restricted:flags.9?<a href='/constructor/true'>true</a> signatures:flags.11?<a href='/constructor/true'>true</a> min:flags.12?<a href='/constructor/true'>true</a> scam:flags.19?<a href='/constructor/true'>true</a> has_link:flags.20?<a href='/constructor/true'>true</a> has_geo:flags.21?<a href='/constructor/true'>true</a> slowmode_enabled:flags.22?<a href='/constructor/true'>true</a> call_active:flags.23?<a href='/constructor/true'>true</a> call_not_empty:flags.24?<a href='/constructor/true'>true</a> fake:flags.25?<a href='/constructor/true'>true</a> gigagroup:flags.26?<a href='/constructor/true'>true</a> noforwards:flags.27?<a href='/constructor/true'>true</a> join_to_send:flags.28?<a href='/constructor/true'>true</a> join_request:flags.29?<a href='/constructor/true'>true</a> forum:flags.30?<a href='/constructor/true'>true</a> flags2:<a href='/type/%23'>#</a> stories_hidden:flags2.1?<a href='/constructor/true'>true</a> stories_hidden_min:flags2.2?<a href='/constructor/true'>true</a> stories_unavailable:flags2.3?<a href='/constructor/true'>true</a> signature_profiles:flags2.12?<a href='/constructor/true'>true</a> id:<a href='/type/long'>long</a> access_hash:flags.13?<a href='/type/long'>long</a> title:<a href='/type/string'>string</a> username:flags.6?<a href='/type/string'>string</a> photo:<a href='/type/ChatPhoto'>ChatPhoto</a> date:<a href='/type/int'>int</a> restriction_reason:flags.9?<a href='/type/Vector%20t'>Vector</a><<a href='/type/RestrictionReason'>RestrictionReason</a>> admin_rights:flags.14?<a href='/type/ChatAdminRights'>ChatAdminRights</a> banned_rights:flags.15?<a href='/type/ChatBannedRights'>ChatBannedRights</a> default_banned_rights:flags.18?<a href='/type/ChatBannedRights'>ChatBannedRights</a> participants_count:flags.17?<a href='/type/int'>int</a> usernames:flags2.0?<a href='/type/Vector%20t'>Vector</a><<a href='/type/Username'>Username</a>> stories_max_id:flags2.4?<a href='/type/int'>int</a> color:flags2.7?<a href='/type/PeerColor'>PeerColor</a> profile_color:flags2.8?<a href='/type/PeerColor'>PeerColor</a> emoji_status:flags2.9?<a href='/type/EmojiStatus'>EmojiStatus</a> level:flags2.10?<a href='/type/int'>int</a> subscription_until_date:flags2.11?<a href='/type/int'>int</a> = <a href='/type/Chat'>Chat</a>;
|
||||
|
||||
|
|
|
@ -208,6 +208,7 @@
|
|||
</ul>
|
||||
<h5><a class="anchor" href="#changed-constructors" id="changed-constructors" name="changed-constructors"><i class="anchor-icon"></i></a>Changed Constructors</h5>
|
||||
<ul>
|
||||
<li>Added <strong>sub_extend</strong> parameter in <a href="/constructor/channelAdminLogEventsFilter">channelAdminLogEventsFilter</a></li>
|
||||
<li>Added <strong>stars</strong> parameter, changed type of <strong>months</strong> from <strong>int</strong> to <strong>flags.4?int</strong> in <a href="/constructor/messageMediaGiveaway">messageMediaGiveaway</a></li>
|
||||
<li>Added <strong>flags</strong>, <strong>stars</strong> parameters in <a href="/constructor/messageActionGiveawayLaunch">messageActionGiveawayLaunch</a></li>
|
||||
<li>Added <strong>stars_prize</strong> parameter, changed type of <strong>gift_code_slug</strong> from <strong>flags.0?string</strong> to <strong>flags.3?string</strong>, <strong>activated_count</strong> from <strong>int</strong> to <strong>flags.2?int</strong> in <a href="/constructor/payments.giveawayInfoResults">payments.giveawayInfoResults</a></li>
|
||||
|
@ -219,7 +220,8 @@
|
|||
<li>Added <strong>flags</strong>, <strong>payload</strong> parameters in <a href="/constructor/inputMediaPaidMedia">inputMediaPaidMedia</a></li>
|
||||
</ul>
|
||||
<h4><a class="anchor" href="#schema" id="schema" name="schema"><i class="anchor-icon"></i></a>Schema</h4>
|
||||
<div><pre><code><a href="/constructor/messageMediaGiveaway">messageMediaGiveaway</a>#aa073beb flags:<a href="/type/%23">#</a> only_new_subscribers:flags.0?<a href="/constructor/true">true</a> winners_are_visible:flags.2?<a href="/constructor/true">true</a> channels:<a href="/type/Vector%20t">Vector</a><<a href="/type/long">long</a>> countries_iso2:flags.1?<a href="/type/Vector%20t">Vector</a><<a href="/type/string">string</a>> prize_description:flags.3?<a href="/type/string">string</a> quantity:<a href="/type/int">int</a> months:flags.4?<a href="/type/int">int</a> stars:flags.5?<a href="/type/long">long</a> until_date:<a href="/type/int">int</a> = <a href="/type/MessageMedia">MessageMedia</a>;
|
||||
<div><pre><code><a href="/constructor/channelAdminLogEventsFilter">channelAdminLogEventsFilter</a>#ea107ae4 flags:<a href="/type/%23">#</a> join:flags.0?<a href="/constructor/true">true</a> leave:flags.1?<a href="/constructor/true">true</a> invite:flags.2?<a href="/constructor/true">true</a> ban:flags.3?<a href="/constructor/true">true</a> unban:flags.4?<a href="/constructor/true">true</a> kick:flags.5?<a href="/constructor/true">true</a> unkick:flags.6?<a href="/constructor/true">true</a> promote:flags.7?<a href="/constructor/true">true</a> demote:flags.8?<a href="/constructor/true">true</a> info:flags.9?<a href="/constructor/true">true</a> settings:flags.10?<a href="/constructor/true">true</a> pinned:flags.11?<a href="/constructor/true">true</a> edit:flags.12?<a href="/constructor/true">true</a> delete:flags.13?<a href="/constructor/true">true</a> group_call:flags.14?<a href="/constructor/true">true</a> invites:flags.15?<a href="/constructor/true">true</a> send:flags.16?<a href="/constructor/true">true</a> forums:flags.17?<a href="/constructor/true">true</a> sub_extend:flags.18?<a href="/constructor/true">true</a> = <a href="/type/ChannelAdminLogEventsFilter">ChannelAdminLogEventsFilter</a>;<br>
|
||||
<a href="/constructor/messageMediaGiveaway">messageMediaGiveaway</a>#aa073beb flags:<a href="/type/%23">#</a> only_new_subscribers:flags.0?<a href="/constructor/true">true</a> winners_are_visible:flags.2?<a href="/constructor/true">true</a> channels:<a href="/type/Vector%20t">Vector</a><<a href="/type/long">long</a>> countries_iso2:flags.1?<a href="/type/Vector%20t">Vector</a><<a href="/type/string">string</a>> prize_description:flags.3?<a href="/type/string">string</a> quantity:<a href="/type/int">int</a> months:flags.4?<a href="/type/int">int</a> stars:flags.5?<a href="/type/long">long</a> until_date:<a href="/type/int">int</a> = <a href="/type/MessageMedia">MessageMedia</a>;
|
||||
<a href="/constructor/messageActionGiveawayLaunch">messageActionGiveawayLaunch</a>#a80f51e4 flags:<a href="/type/%23">#</a> stars:flags.0?<a href="/type/long">long</a> = <a href="/type/MessageAction">MessageAction</a>;<br>
|
||||
<a href="/constructor/payments.giveawayInfoResults">payments.giveawayInfoResults</a>#e175e66f flags:<a href="/type/%23">#</a> winner:flags.0?<a href="/constructor/true">true</a> refunded:flags.1?<a href="/constructor/true">true</a> start_date:<a href="/type/int">int</a> gift_code_slug:flags.3?<a href="/type/string">string</a> stars_prize:flags.4?<a href="/type/long">long</a> finish_date:<a href="/type/int">int</a> winners_count:<a href="/type/int">int</a> activated_count:flags.2?<a href="/type/int">int</a> = <a href="/type/payments.GiveawayInfo">payments.GiveawayInfo</a>;<br>
|
||||
<a href="/constructor/boost">boost</a>#4b3e14d6 flags:<a href="/type/%23">#</a> gift:flags.1?<a href="/constructor/true">true</a> giveaway:flags.2?<a href="/constructor/true">true</a> unclaimed:flags.3?<a href="/constructor/true">true</a> id:<a href="/type/string">string</a> user_id:flags.0?<a href="/type/long">long</a> giveaway_msg_id:flags.2?<a href="/type/int">int</a> date:<a href="/type/int">int</a> expires:<a href="/type/int">int</a> used_gift_slug:flags.4?<a href="/type/string">string</a> multiplier:flags.5?<a href="/type/int">int</a> stars:flags.6?<a href="/type/long">long</a> = <a href="/type/Boost">Boost</a>;<br>
|
||||
|
@ -279,7 +281,6 @@
|
|||
<li>Added <strong>paid_reactions_available</strong> parameter in <a href="/constructor/channelFull">channelFull</a></li>
|
||||
<li>Added <strong>flags</strong>, <strong>subscription_until_date</strong> parameters in <a href="/constructor/channelParticipant">channelParticipant</a></li>
|
||||
<li>Added <strong>subscription_until_date</strong> parameter in <a href="/constructor/channelParticipantSelf">channelParticipantSelf</a></li>
|
||||
<li>Added <strong>sub_extend</strong> parameter in <a href="/constructor/channelAdminLogEventsFilter">channelAdminLogEventsFilter</a></li>
|
||||
<li>Added <strong>media</strong> parameter in <a href="/constructor/sponsoredMessage">sponsoredMessage</a></li>
|
||||
<li>Added <strong>top_reactors</strong> parameter in <a href="/constructor/messageReactions">messageReactions</a></li>
|
||||
<li>Added <strong>reaction</strong>, <strong>subscription_period</strong> parameters in <a href="/constructor/starsTransaction">starsTransaction</a></li>
|
||||
|
@ -292,8 +293,7 @@
|
|||
<a href="/constructor/channel">channel</a>#fe4478bd flags:<a href="/type/%23">#</a> creator:flags.0?<a href="/constructor/true">true</a> left:flags.2?<a href="/constructor/true">true</a> broadcast:flags.5?<a href="/constructor/true">true</a> verified:flags.7?<a href="/constructor/true">true</a> megagroup:flags.8?<a href="/constructor/true">true</a> restricted:flags.9?<a href="/constructor/true">true</a> signatures:flags.11?<a href="/constructor/true">true</a> min:flags.12?<a href="/constructor/true">true</a> scam:flags.19?<a href="/constructor/true">true</a> has_link:flags.20?<a href="/constructor/true">true</a> has_geo:flags.21?<a href="/constructor/true">true</a> slowmode_enabled:flags.22?<a href="/constructor/true">true</a> call_active:flags.23?<a href="/constructor/true">true</a> call_not_empty:flags.24?<a href="/constructor/true">true</a> fake:flags.25?<a href="/constructor/true">true</a> gigagroup:flags.26?<a href="/constructor/true">true</a> noforwards:flags.27?<a href="/constructor/true">true</a> join_to_send:flags.28?<a href="/constructor/true">true</a> join_request:flags.29?<a href="/constructor/true">true</a> forum:flags.30?<a href="/constructor/true">true</a> flags2:<a href="/type/%23">#</a> stories_hidden:flags2.1?<a href="/constructor/true">true</a> stories_hidden_min:flags2.2?<a href="/constructor/true">true</a> stories_unavailable:flags2.3?<a href="/constructor/true">true</a> signature_profiles:flags2.12?<a href="/constructor/true">true</a> id:<a href="/type/long">long</a> access_hash:flags.13?<a href="/type/long">long</a> title:<a href="/type/string">string</a> username:flags.6?<a href="/type/string">string</a> photo:<a href="/type/ChatPhoto">ChatPhoto</a> date:<a href="/type/int">int</a> restriction_reason:flags.9?<a href="/type/Vector%20t">Vector</a><<a href="/type/RestrictionReason">RestrictionReason</a>> admin_rights:flags.14?<a href="/type/ChatAdminRights">ChatAdminRights</a> banned_rights:flags.15?<a href="/type/ChatBannedRights">ChatBannedRights</a> default_banned_rights:flags.18?<a href="/type/ChatBannedRights">ChatBannedRights</a> participants_count:flags.17?<a href="/type/int">int</a> usernames:flags2.0?<a href="/type/Vector%20t">Vector</a><<a href="/type/Username">Username</a>> stories_max_id:flags2.4?<a href="/type/int">int</a> color:flags2.7?<a href="/type/PeerColor">PeerColor</a> profile_color:flags2.8?<a href="/type/PeerColor">PeerColor</a> emoji_status:flags2.9?<a href="/type/EmojiStatus">EmojiStatus</a> level:flags2.10?<a href="/type/int">int</a> subscription_until_date:flags2.11?<a href="/type/int">int</a> = <a href="/type/Chat">Chat</a>;
|
||||
<a href="/constructor/channelFull">channelFull</a>#bbab348d flags:<a href="/type/%23">#</a> can_view_participants:flags.3?<a href="/constructor/true">true</a> can_set_username:flags.6?<a href="/constructor/true">true</a> can_set_stickers:flags.7?<a href="/constructor/true">true</a> hidden_prehistory:flags.10?<a href="/constructor/true">true</a> can_set_location:flags.16?<a href="/constructor/true">true</a> has_scheduled:flags.19?<a href="/constructor/true">true</a> can_view_stats:flags.20?<a href="/constructor/true">true</a> blocked:flags.22?<a href="/constructor/true">true</a> flags2:<a href="/type/%23">#</a> can_delete_channel:flags2.0?<a href="/constructor/true">true</a> antispam:flags2.1?<a href="/constructor/true">true</a> participants_hidden:flags2.2?<a href="/constructor/true">true</a> translations_disabled:flags2.3?<a href="/constructor/true">true</a> stories_pinned_available:flags2.5?<a href="/constructor/true">true</a> view_forum_as_messages:flags2.6?<a href="/constructor/true">true</a> restricted_sponsored:flags2.11?<a href="/constructor/true">true</a> can_view_revenue:flags2.12?<a href="/constructor/true">true</a> paid_media_allowed:flags2.14?<a href="/constructor/true">true</a> can_view_stars_revenue:flags2.15?<a href="/constructor/true">true</a> paid_reactions_available:flags2.16?<a href="/constructor/true">true</a> id:<a href="/type/long">long</a> about:<a href="/type/string">string</a> participants_count:flags.0?<a href="/type/int">int</a> admins_count:flags.1?<a href="/type/int">int</a> kicked_count:flags.2?<a href="/type/int">int</a> banned_count:flags.2?<a href="/type/int">int</a> online_count:flags.13?<a href="/type/int">int</a> read_inbox_max_id:<a href="/type/int">int</a> read_outbox_max_id:<a href="/type/int">int</a> unread_count:<a href="/type/int">int</a> chat_photo:<a href="/type/Photo">Photo</a> notify_settings:<a href="/type/PeerNotifySettings">PeerNotifySettings</a> exported_invite:flags.23?<a href="/type/ExportedChatInvite">ExportedChatInvite</a> bot_info:<a href="/type/Vector%20t">Vector</a><<a href="/type/BotInfo">BotInfo</a>> migrated_from_chat_id:flags.4?<a href="/type/long">long</a> migrated_from_max_id:flags.4?<a href="/type/int">int</a> pinned_msg_id:flags.5?<a href="/type/int">int</a> stickerset:flags.8?<a href="/type/StickerSet">StickerSet</a> available_min_id:flags.9?<a href="/type/int">int</a> folder_id:flags.11?<a href="/type/int">int</a> linked_chat_id:flags.14?<a href="/type/long">long</a> location:flags.15?<a href="/type/ChannelLocation">ChannelLocation</a> slowmode_seconds:flags.17?<a href="/type/int">int</a> slowmode_next_send_date:flags.18?<a href="/type/int">int</a> stats_dc:flags.12?<a href="/type/int">int</a> pts:<a href="/type/int">int</a> call:flags.21?<a href="/type/InputGroupCall">InputGroupCall</a> ttl_period:flags.24?<a href="/type/int">int</a> pending_suggestions:flags.25?<a href="/type/Vector%20t">Vector</a><<a href="/type/string">string</a>> groupcall_default_join_as:flags.26?<a href="/type/Peer">Peer</a> theme_emoticon:flags.27?<a href="/type/string">string</a> requests_pending:flags.28?<a href="/type/int">int</a> recent_requesters:flags.28?<a href="/type/Vector%20t">Vector</a><<a href="/type/long">long</a>> default_send_as:flags.29?<a href="/type/Peer">Peer</a> available_reactions:flags.30?<a href="/type/ChatReactions">ChatReactions</a> reactions_limit:flags2.13?<a href="/type/int">int</a> stories:flags2.4?<a href="/type/PeerStories">PeerStories</a> wallpaper:flags2.7?<a href="/type/WallPaper">WallPaper</a> boosts_applied:flags2.8?<a href="/type/int">int</a> boosts_unrestrict:flags2.9?<a href="/type/int">int</a> emojiset:flags2.10?<a href="/type/StickerSet">StickerSet</a> = <a href="/type/ChatFull">ChatFull</a>;
|
||||
<a href="/constructor/channelParticipant">channelParticipant</a>#cb397619 flags:<a href="/type/%23">#</a> user_id:<a href="/type/long">long</a> date:<a href="/type/int">int</a> subscription_until_date:flags.0?<a href="/type/int">int</a> = <a href="/type/ChannelParticipant">ChannelParticipant</a>;
|
||||
<a href="/constructor/channelParticipantSelf">channelParticipantSelf</a>#4f607bef flags:<a href="/type/%23">#</a> via_request:flags.0?<a href="/constructor/true">true</a> user_id:<a href="/type/long">long</a> inviter_id:<a href="/type/long">long</a> date:<a href="/type/int">int</a> subscription_until_date:flags.1?<a href="/type/int">int</a> = <a href="/type/ChannelParticipant">ChannelParticipant</a>;
|
||||
<a href="/constructor/channelAdminLogEventsFilter">channelAdminLogEventsFilter</a>#ea107ae4 flags:<a href="/type/%23">#</a> join:flags.0?<a href="/constructor/true">true</a> leave:flags.1?<a href="/constructor/true">true</a> invite:flags.2?<a href="/constructor/true">true</a> ban:flags.3?<a href="/constructor/true">true</a> unban:flags.4?<a href="/constructor/true">true</a> kick:flags.5?<a href="/constructor/true">true</a> unkick:flags.6?<a href="/constructor/true">true</a> promote:flags.7?<a href="/constructor/true">true</a> demote:flags.8?<a href="/constructor/true">true</a> info:flags.9?<a href="/constructor/true">true</a> settings:flags.10?<a href="/constructor/true">true</a> pinned:flags.11?<a href="/constructor/true">true</a> edit:flags.12?<a href="/constructor/true">true</a> delete:flags.13?<a href="/constructor/true">true</a> group_call:flags.14?<a href="/constructor/true">true</a> invites:flags.15?<a href="/constructor/true">true</a> send:flags.16?<a href="/constructor/true">true</a> forums:flags.17?<a href="/constructor/true">true</a> sub_extend:flags.18?<a href="/constructor/true">true</a> = <a href="/type/ChannelAdminLogEventsFilter">ChannelAdminLogEventsFilter</a>;<br>
|
||||
<a href="/constructor/channelParticipantSelf">channelParticipantSelf</a>#4f607bef flags:<a href="/type/%23">#</a> via_request:flags.0?<a href="/constructor/true">true</a> user_id:<a href="/type/long">long</a> inviter_id:<a href="/type/long">long</a> date:<a href="/type/int">int</a> subscription_until_date:flags.1?<a href="/type/int">int</a> = <a href="/type/ChannelParticipant">ChannelParticipant</a>;<br>
|
||||
<a href="/constructor/sponsoredMessage">sponsoredMessage</a>#4d93a990 flags:<a href="/type/%23">#</a> recommended:flags.5?<a href="/constructor/true">true</a> can_report:flags.12?<a href="/constructor/true">true</a> random_id:<a href="/type/bytes">bytes</a> url:<a href="/type/string">string</a> title:<a href="/type/string">string</a> message:<a href="/type/string">string</a> entities:flags.1?<a href="/type/Vector%20t">Vector</a><<a href="/type/MessageEntity">MessageEntity</a>> photo:flags.6?<a href="/type/Photo">Photo</a> media:flags.14?<a href="/type/MessageMedia">MessageMedia</a> color:flags.13?<a href="/type/PeerColor">PeerColor</a> button_text:<a href="/type/string">string</a> sponsor_info:flags.7?<a href="/type/string">string</a> additional_info:flags.8?<a href="/type/string">string</a> = <a href="/type/SponsoredMessage">SponsoredMessage</a>;<br>
|
||||
<a href="/constructor/messageReactions">messageReactions</a>#0a339f0b flags:<a href="/type/%23">#</a> min:flags.0?<a href="/constructor/true">true</a> can_see_list:flags.2?<a href="/constructor/true">true</a> reactions_as_tags:flags.3?<a href="/constructor/true">true</a> results:<a href="/type/Vector%20t">Vector</a><<a href="/type/ReactionCount">ReactionCount</a>> recent_reactions:flags.1?<a href="/type/Vector%20t">Vector</a><<a href="/type/MessagePeerReaction">MessagePeerReaction</a>> top_reactors:flags.4?<a href="/type/Vector%20t">Vector</a><<a href="/type/MessageReactor">MessageReactor</a>> = <a href="/type/MessageReactions">MessageReactions</a>;<br>
|
||||
<a href="/constructor/starsTransaction">starsTransaction</a>#433aeb2b flags:<a href="/type/%23">#</a> refund:flags.3?<a href="/constructor/true">true</a> pending:flags.4?<a href="/constructor/true">true</a> failed:flags.6?<a href="/constructor/true">true</a> gift:flags.10?<a href="/constructor/true">true</a> reaction:flags.11?<a href="/constructor/true">true</a> id:<a href="/type/string">string</a> stars:<a href="/type/long">long</a> date:<a href="/type/int">int</a> peer:<a href="/type/StarsTransactionPeer">StarsTransactionPeer</a> title:flags.0?<a href="/type/string">string</a> description:flags.1?<a href="/type/string">string</a> photo:flags.2?<a href="/type/WebDocument">WebDocument</a> transaction_date:flags.5?<a href="/type/int">int</a> transaction_url:flags.5?<a href="/type/string">string</a> bot_payload:flags.7?<a href="/type/bytes">bytes</a> msg_id:flags.8?<a href="/type/int">int</a> extended_media:flags.9?<a href="/type/Vector%20t">Vector</a><<a href="/type/MessageMedia">MessageMedia</a>> subscription_period:flags.12?<a href="/type/int">int</a> = <a href="/type/StarsTransaction">StarsTransaction</a>;<br>
|
||||
|
|
|
@ -105,13 +105,15 @@ Use <a href="/method/messages.readReactions">messages.readReactions</a> to mark
|
|||
|
||||
<a href='/method/messages.getMessagesReactions'>messages.getMessagesReactions</a>#8bba90e6 peer:<a href='/type/InputPeer'>InputPeer</a> id:<a href='/type/Vector%20t'>Vector</a><<a href='/type/int'>int</a>> = <a href='/type/Updates'>Updates</a>;</code></pre>
|
||||
<p>Paid reactions (aka Star reactions) may be sent to channel posts by invoking <a href="/method/messages.sendPaidReaction">messages.sendPaidReaction</a>: this will transfer <code>count</code> Telegram Stars to the channel's balance and increment by <code>count</code> the reaction counter of the Star reaction with type <a href="/constructor/reactionPaid">reactionPaid</a>. </p>
|
||||
<p>To enable paid reactions, channel admins must invoke <a href="/method/messages.setChatAvailableReactions">messages.setChatAvailableReactions</a>, passing <a href="/constructor/boolTrue">boolTrue</a> to <code>paid_enabled</code> and the previously configured reaction set in <code>available_reactions</code> (<code>reactions_limit</code> can be omitted, as omitting the flag will keep the previously configured value). </p>
|
||||
<p>To enable paid reactions, channel admins must invoke <a href="/method/messages.setChatAvailableReactions">messages.setChatAvailableReactions</a>, passing <a href="/constructor/boolTrue">boolTrue</a> to <code>paid_enabled</code> and the previously configured reaction set in <code>available_reactions</code> (<code>reactions_limit</code> can be omitted, as omitting the flag will keep the previously configured value). </p>
|
||||
<p>Users can determine whether a channel supports paid reactions by checking the value of the <a href="/constructor/channelFull">channelFull</a>.<code>paid_reactions_available</code> flag. </p>
|
||||
<p>Each post with star reactions has a leaderboard with the top senders, but users can opt out of appearing there if they prefer more privacy.<br>
|
||||
If the user explicitly chose to make their paid reaction(s) private, pass <a href="/constructor/boolTrue">boolTrue</a> to <a href="/method/messages.sendPaidReaction">messages.sendPaidReaction</a>.<code>private</code>.<br>
|
||||
If the user explicitly chose to make their paid reaction(s) private, pass <a href="/constructor/boolTrue">boolFalse</a> to <a href="/method/messages.sendPaidReaction">messages.sendPaidReaction</a>.<code>private</code>.<br>
|
||||
If the user did not make any explicit choice about the privacy of their paid reaction(s) (i.e. when reacting by clicking on an existing star reaction on a message), do not populate the <a href="/method/messages.sendPaidReaction">messages.sendPaidReaction</a>.<code>private</code> flag. </p>
|
||||
<p>To change the privacy of already sent paid reactions, invoke <a href="/method/messages.togglePaidReactionPrivacy">messages.togglePaidReactionPrivacy</a>, passing the ID of the message, the channel and the desired privacy setting. </p>
|
||||
<p>To fetch the paid reactions leaderboard, invoke <a href="/method/messages.getMessagesReactions">messages.getMessagesReactions</a>: the returned <a href="/constructor/updateMessageReactions">updateMessageReactions</a> constructor will contain a <code>top_reactors</code> vector of <a href="/constructor/messageReactor">messageReactor</a>s, containing the paid reactions leaderboard for that message. </p>
|
||||
<p>Channel admins can also see the end date of the current subscription period for any user in <a href="/constructor/channelParticipant">channelParticipant</a>.<code>subscription_until_date</code>.</p>
|
||||
<h3><a class="anchor" href="#react-to-a-story" id="react-to-a-story" name="react-to-a-story"><i class="anchor-icon"></i></a>React to a story</h3>
|
||||
<p>See <a href="/api/stories#reactions">here »</a> for more info on how to react to a story.</p>
|
||||
<h3><a class="anchor" href="#notifications-about-reactions" id="notifications-about-reactions" name="notifications-about-reactions"><i class="anchor-icon"></i></a>Notifications about reactions</h3>
|
||||
|
|
|
@ -82,12 +82,12 @@
|
|||
<tr>
|
||||
<td><strong>signatures_enabled</strong></td>
|
||||
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.0?<a href="/constructor/true">true</a></td>
|
||||
<td> </td>
|
||||
<td>If set, enables message signatures.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>profiles_enabled</strong></td>
|
||||
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.1?<a href="/constructor/true">true</a></td>
|
||||
<td> </td>
|
||||
<td>If set, messages from channel admins will link to their profiles, just like for group messages: can only be set if the <code>signatures_enabled</code> flag is set.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>channel</strong></td>
|
||||
|
|
|
@ -81,7 +81,7 @@
|
|||
<tr>
|
||||
<td><strong>subscription_expired</strong></td>
|
||||
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.3?<a href="/constructor/true">true</a></td>
|
||||
<td> </td>
|
||||
<td>Set this flag if the link is a <a href="/api/stars#star-subscriptions">Telegram Star subscription link »</a> and only members with already expired subscription must be returned.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>peer</strong></td>
|
||||
|
@ -167,6 +167,8 @@
|
|||
<h3><a class="anchor" href="#related-pages" id="related-pages" name="related-pages"><i class="anchor-icon"></i></a>Related pages</h3>
|
||||
<h4><a class="anchor" href="#invites" id="invites" name="invites"><i class="anchor-icon"></i></a><a href="/api/invites">Invites</a></h4>
|
||||
<p>Chats and channels may have a public username or a private invite link: private invite links may be further enhanced with per-user join requests.</p>
|
||||
<h4><a class="anchor" href="#telegram-stars" id="telegram-stars" name="telegram-stars"><i class="anchor-icon"></i></a><a href="/api/stars">Telegram Stars</a></h4>
|
||||
<p>Telegram Stars are virtual items that allow users to purchase digital goods and services from bots and mini apps inside the Telegram ecosystem, send gifts to content creators on the Telegram platform, and more.</p>
|
||||
<h4><a class="anchor" href="#pagination-in-the-api" id="pagination-in-the-api" name="pagination-in-the-api"><i class="anchor-icon"></i></a><a href="/api/offsets">Pagination in the API</a></h4>
|
||||
<p>How to fetch results from large lists of objects.</p></div>
|
||||
|
||||
|
|
|
@ -92,7 +92,7 @@
|
|||
<tr>
|
||||
<td><strong>subscription_id</strong></td>
|
||||
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.3?<a href="/type/string">string</a></td>
|
||||
<td> </td>
|
||||
<td>If set, fetches only transactions for the specified <a href="/api/stars#star-subscriptions">Telegram Star subscription »</a>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>peer</strong></td>
|
||||
|
@ -137,12 +137,12 @@
|
|||
</table>
|
||||
<h3><a class="anchor" href="#bots-can-use-this-method" id="bots-can-use-this-method" name="bots-can-use-this-method"><i class="anchor-icon"></i></a>Bots can use this method</h3>
|
||||
<h3><a class="anchor" href="#related-pages" id="related-pages" name="related-pages"><i class="anchor-icon"></i></a>Related pages</h3>
|
||||
<h4><a class="anchor" href="#telegram-stars" id="telegram-stars" name="telegram-stars"><i class="anchor-icon"></i></a><a href="/api/stars">Telegram Stars</a></h4>
|
||||
<p>Telegram Stars are virtual items that allow users to purchase digital goods and services from bots and mini apps inside the Telegram ecosystem, send gifts to content creators on the Telegram platform, and more.</p>
|
||||
<h4><a class="anchor" href="#inputpeerself" id="inputpeerself" name="inputpeerself"><i class="anchor-icon"></i></a><a href="/constructor/inputPeerSelf">inputPeerSelf</a></h4>
|
||||
<p>Defines the current user.</p>
|
||||
<h4><a class="anchor" href="#pagination-in-the-api" id="pagination-in-the-api" name="pagination-in-the-api"><i class="anchor-icon"></i></a><a href="/api/offsets">Pagination in the API</a></h4>
|
||||
<p>How to fetch results from large lists of objects.</p>
|
||||
<h4><a class="anchor" href="#telegram-stars" id="telegram-stars" name="telegram-stars"><i class="anchor-icon"></i></a><a href="/api/stars">Telegram Stars</a></h4>
|
||||
<p>Telegram Stars are virtual items that allow users to purchase digital goods and services from bots and mini apps inside the Telegram ecosystem, send gifts to content creators on the Telegram platform, and more.</p></div>
|
||||
<p>How to fetch results from large lists of objects.</p></div>
|
||||
|
||||
</div>
|
||||
|
||||
|
|
|
@ -53,9 +53,9 @@
|
|||
<h5><a class="anchor" href="#1-client-sends-query-to-server" id="1-client-sends-query-to-server" name="1-client-sends-query-to-server"><i class="anchor-icon"></i></a>1) Client sends query to server</h5>
|
||||
<!-- start req_pq_multi -->
|
||||
<p>Sent payload (excluding transport headers/trailers):</p>
|
||||
<pre><code>0000 | 00 00 00 00 00 00 00 00 D8 7F 03 00 DD A6 38 67
|
||||
0010 | 14 00 00 00 F1 8E 7E BE F2 FF EB DA 55 A0 62 61
|
||||
0020 | 90 B6 57 AC CD F3 9C 05</code></pre>
|
||||
<pre><code>0000 | 00 00 00 00 00 00 00 00 CC C4 07 00 09 A9 38 67
|
||||
0010 | 14 00 00 00 F1 8E 7E BE 88 A0 0C B2 64 2E 0D CC
|
||||
0020 | D6 BD 55 3F 42 43 30 B4</code></pre>
|
||||
<p>Payload (de)serialization:</p>
|
||||
<pre><code>req_pq_multi#be7e8ef1 nonce:int128 = ResPQ;</code></pre>
|
||||
<table class="table">
|
||||
|
@ -77,7 +77,7 @@
|
|||
<tr>
|
||||
<td>message_id</td>
|
||||
<td>8, 8</td>
|
||||
<td><code>D87F0300DDA63867</code></td>
|
||||
<td><code>CCC4070009A93867</code></td>
|
||||
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() << 32) + (N*4)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@ -95,7 +95,7 @@
|
|||
<tr>
|
||||
<td>nonce</td>
|
||||
<td>24, 16</td>
|
||||
<td><code>F2FFEBDA55A0626190B657ACCDF39C05</code></td>
|
||||
<td><code>88A00CB2642E0DCCD6BD553F424330B4</code></td>
|
||||
<td>Random number</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
@ -104,11 +104,11 @@
|
|||
<h5><a class="anchor" href="#2-server-sends-response-of-the-form" id="2-server-sends-response-of-the-form" name="2-server-sends-response-of-the-form"><i class="anchor-icon"></i></a>2) Server sends response of the form</h5>
|
||||
<!-- start resPQ -->
|
||||
<p>Received payload (excluding transport headers/trailers):</p>
|
||||
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 30 5D EC DD A6 38 67
|
||||
0010 | 50 00 00 00 63 24 16 05 F2 FF EB DA 55 A0 62 61
|
||||
0020 | 90 B6 57 AC CD F3 9C 05 C8 97 E4 83 8C 1A 47 33
|
||||
0030 | D9 43 AB 98 93 64 1F B4 08 15 4F 99 C1 AD 76 59
|
||||
0040 | B7 00 00 00 15 C4 B5 1C 03 00 00 00 85 FD 64 DE
|
||||
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 78 D6 E3 09 A9 38 67
|
||||
0010 | 50 00 00 00 63 24 16 05 88 A0 0C B2 64 2E 0D CC
|
||||
0020 | D6 BD 55 3F 42 43 30 B4 8A 33 80 8D 1D 5B AE E2
|
||||
0030 | 7E 2D 08 4D AB 67 CE D0 08 19 EE AA 4A 04 90 58
|
||||
0040 | BD 00 00 00 15 C4 B5 1C 03 00 00 00 85 FD 64 DE
|
||||
0050 | 85 1D 9D D0 A5 B7 F7 09 35 5F C3 0B 21 6B E8 6C
|
||||
0060 | 02 2B B4 C3</code></pre>
|
||||
<p>Payload (de)serialization:</p>
|
||||
|
@ -132,7 +132,7 @@
|
|||
<tr>
|
||||
<td>message_id</td>
|
||||
<td>8, 8</td>
|
||||
<td><code>01305DECDDA63867</code></td>
|
||||
<td><code>0178D6E309A93867</code></td>
|
||||
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() << 32) + (N*4)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@ -150,19 +150,19 @@
|
|||
<tr>
|
||||
<td>nonce</td>
|
||||
<td>24, 16</td>
|
||||
<td><code>F2FFEBDA55A0626190B657ACCDF39C05</code></td>
|
||||
<td><code>88A00CB2642E0DCCD6BD553F424330B4</code></td>
|
||||
<td>Value generated by client in Step 1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>server_nonce</td>
|
||||
<td>40, 16</td>
|
||||
<td><code>C897E4838C1A4733D943AB9893641FB4</code></td>
|
||||
<td><code>8A33808D1D5BAEE27E2D084DAB67CED0</code></td>
|
||||
<td>Server-generated random number</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>pq</td>
|
||||
<td>56, 12</td>
|
||||
<td><code>08154F99C1AD7659B7000000</code><br>TL byte deserialization <br>=> bigendian conversion to decimal<br>=> 1535615055074580919</td>
|
||||
<td><code>0819EEAA4A049058BD000000</code><br>TL byte deserialization <br>=> bigendian conversion to decimal<br>=> 1868618130286205117</td>
|
||||
<td>Single-byte prefix denoting length, an 8-byte string, and three bytes of padding</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@ -208,22 +208,22 @@
|
|||
<h4><a class="anchor" href="#proof-of-work" id="proof-of-work" name="proof-of-work"><i class="anchor-icon"></i></a>Proof of work</h4>
|
||||
<h5><a class="anchor" href="#3-client-decomposes-pq-into-prime-factors-such-that-p-lt-q" id="3-client-decomposes-pq-into-prime-factors-such-that-p-lt-q" name="3-client-decomposes-pq-into-prime-factors-such-that-p-lt-q"><i class="anchor-icon"></i></a>3) Client decomposes pq into prime factors such that p < q.</h5>
|
||||
<!-- start pq -->
|
||||
<pre><code>pq = 1535615055074580919</code></pre>
|
||||
<p>Decompose into 2 prime cofactors <code>p < q</code>: <code>1535615055074580919 = 1164798461 * 1318352579</code></p>
|
||||
<pre><code>p = 1164798461
|
||||
q = 1318352579</code></pre>
|
||||
<pre><code>pq = 1868618130286205117</code></pre>
|
||||
<p>Decompose into 2 prime cofactors <code>p < q</code>: <code>1868618130286205117 = 1093105483 * 1709458199</code></p>
|
||||
<pre><code>p = 1093105483
|
||||
q = 1709458199</code></pre>
|
||||
<!-- end pq -->
|
||||
<h4><a class="anchor" href="#presenting-proof-of-work-server-authentication" id="presenting-proof-of-work-server-authentication" name="presenting-proof-of-work-server-authentication"><i class="anchor-icon"></i></a>Presenting proof of work; Server authentication</h4>
|
||||
<h5><a class="anchor" href="#4-encrypted-data-payload-generation" id="4-encrypted-data-payload-generation" name="4-encrypted-data-payload-generation"><i class="anchor-icon"></i></a>4) <code>encrypted_data</code> payload generation</h5>
|
||||
<p>First of all, generate an <code>encrypted_data</code> payload as follows:</p>
|
||||
<!-- start p_q_inner_data_dc -->
|
||||
<p>Generated payload (excluding transport headers/trailers):</p>
|
||||
<pre><code>0000 | 95 5F F5 A9 08 15 4F 99 C1 AD 76 59 B7 00 00 00
|
||||
0010 | 04 45 6D 69 FD 00 00 00 04 4E 94 76 C3 00 00 00
|
||||
0020 | F2 FF EB DA 55 A0 62 61 90 B6 57 AC CD F3 9C 05
|
||||
0030 | C8 97 E4 83 8C 1A 47 33 D9 43 AB 98 93 64 1F B4
|
||||
0040 | 11 83 DF 59 14 4A 45 26 F1 B0 E6 C9 A4 B2 7C 6C
|
||||
0050 | 80 36 BD EE 0C 5C 7A D7 07 F6 94 1A AE C9 28 8E
|
||||
<pre><code>0000 | 95 5F F5 A9 08 19 EE AA 4A 04 90 58 BD 00 00 00
|
||||
0010 | 04 41 27 77 4B 00 00 00 04 65 E4 43 17 00 00 00
|
||||
0020 | 88 A0 0C B2 64 2E 0D CC D6 BD 55 3F 42 43 30 B4
|
||||
0030 | 8A 33 80 8D 1D 5B AE E2 7E 2D 08 4D AB 67 CE D0
|
||||
0040 | C6 1C 4C B1 76 7F D6 E5 66 1D 48 E8 30 35 96 85
|
||||
0050 | BB E4 FD 66 9F 97 F4 20 34 05 82 EE CF 6A 39 84
|
||||
0060 | 02 00 00 00</code></pre>
|
||||
<p>Payload (de)serialization:</p>
|
||||
<pre><code>p_q_inner_data_dc#a9f55f95 pq:string p:string q:string nonce:int128 server_nonce:int128 new_nonce:int256 dc:int = P_Q_inner_data;</code></pre>
|
||||
|
@ -246,37 +246,37 @@ q = 1318352579</code></pre>
|
|||
<tr>
|
||||
<td>pq</td>
|
||||
<td>4, 12</td>
|
||||
<td><code>08154F99C1AD7659B7000000</code><br>TL byte deserialization <br>=> bigendian conversion to decimal<br>=> 1535615055074580919</td>
|
||||
<td><code>0819EEAA4A049058BD000000</code><br>TL byte deserialization <br>=> bigendian conversion to decimal<br>=> 1868618130286205117</td>
|
||||
<td>Single-byte prefix denoting length, 8-byte string, and three bytes of padding</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>p</td>
|
||||
<td>16, 8</td>
|
||||
<td><code>04456D69FD000000</code><br>TL byte deserialization <br>=> bigendian conversion to decimal<br>=> 1164798461</td>
|
||||
<td><code>044127774B000000</code><br>TL byte deserialization <br>=> bigendian conversion to decimal<br>=> 1093105483</td>
|
||||
<td>First prime cofactor: single-byte prefix denoting length, 4-byte string, and three bytes of padding</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>q</td>
|
||||
<td>24, 8</td>
|
||||
<td><code>044E9476C3000000</code><br>TL byte deserialization <br>=> bigendian conversion to decimal<br>=> 1318352579</td>
|
||||
<td><code>0465E44317000000</code><br>TL byte deserialization <br>=> bigendian conversion to decimal<br>=> 1709458199</td>
|
||||
<td>Second prime cofactor: single-byte prefix denoting length, 4-byte string, and three bytes of padding</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>nonce</td>
|
||||
<td>32, 16</td>
|
||||
<td><code>F2FFEBDA55A0626190B657ACCDF39C05</code></td>
|
||||
<td><code>88A00CB2642E0DCCD6BD553F424330B4</code></td>
|
||||
<td>Value generated by client in Step 1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>server_nonce</td>
|
||||
<td>48, 16</td>
|
||||
<td><code>C897E4838C1A4733D943AB9893641FB4</code></td>
|
||||
<td><code>8A33808D1D5BAEE27E2D084DAB67CED0</code></td>
|
||||
<td>Value received from server in Step 2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>new_nonce</td>
|
||||
<td>64, 32</td>
|
||||
<td><code>1183DF59144A4526F1B0E6C9A4B27C6C</code> <code>8036BDEE0C5C7AD707F6941AAEC9288E</code></td>
|
||||
<td><code>C61C4CB1767FD6E5661D48E830359685</code> <code>BBE4FD669F97F420340582EECF6A3984</code></td>
|
||||
<td>Client-generated random number</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@ -291,39 +291,39 @@ q = 1318352579</code></pre>
|
|||
<p>The serialization of <em>P_Q_inner_data</em> produces <strong>data</strong>, which is used to generate <strong>encrypted_data</strong> as specified in <a href="/mtproto/auth_key">step 4.1</a>.<br>
|
||||
These are the inputs to the algorithm specified in <a href="/mtproto/auth_key">step 4.1</a>:</p>
|
||||
<!-- start p_q_inner_data_input -->
|
||||
<pre><code>data = 955FF5A908154F99C1AD7659B700000004456D69FD000000044E9476C3000000F2FFEBDA55A0626190B657ACCDF39C05C897E4838C1A4733D943AB9893641FB41183DF59144A4526F1B0E6C9A4B27C6C8036BDEE0C5C7AD707F6941AAEC9288E02000000
|
||||
random_padding_bytes = BE3707A89AE9B01B20AFBF2DFE2469A511655C0B8BC61714EB603611AF1FA618B2943619E8AA74B88439ED0870657660BC1167DFF5A7BBA65DC878A3F677C3E8D9DBCE966EBEADB069E11FCA0DA8EEA1F411182BAE338F54BCE44AE6</code></pre>
|
||||
<pre><code>data = 955FF5A90819EEAA4A049058BD000000044127774B0000000465E4431700000088A00CB2642E0DCCD6BD553F424330B48A33808D1D5BAEE27E2D084DAB67CED0C61C4CB1767FD6E5661D48E830359685BBE4FD669F97F420340582EECF6A398402000000
|
||||
random_padding_bytes = 4FD6DF70DAC10A80FB882E175ED130769E47ACA62330CFA8098708C10A765264176E3391DBC1E80CDEADD8C4A4EC3CBA7CA7C08FBBD4881A4435EC7B6A4A5CF5897E970AAA0330FA4C188BA83A02620EBC82AF9426FD88829A5683AD</code></pre>
|
||||
<!-- end p_q_inner_data_input -->
|
||||
<p>And this is the output:</p>
|
||||
<!-- start p_q_inner_data_output -->
|
||||
<pre><code>encrypted_data = 350F55A03139C665B4C03D92B4E02D81AB71F6B7BE05CADBFAE678223B0DBB53192D60A9AD6A9E1A36EC9EE33A69B7ACD965E488C3ECB859DC7DCAF9303F24BA38556EC7584AE5448A979BF70F031EBD219F3795209A2D07A4E09DEF29638458CF1A3798D59483C8F7C8FA0D24FE31676E8AE9D8AB10AA7C0702A16CC2E096C861700D073E5131E716A98FE1051AD58526F1F151ADADD2E19F537E716CD5558330DEDDE1D49BE50AC20CE6A040823EB497037B49FCA16549479A4E7AF3D349B907E71FD32E675B487CB7995833619B8185F1DCDAFD7309302B0829C18B049CC796F4DC7A79CE49D614A92304D67EA44A1B57E70FA89441BDE0DA58484AACB666</code></pre>
|
||||
<pre><code>encrypted_data = 619B4727009001B44082013B8731011A984F708CD5D0C253FF48BDB3DFAFA2637FFA25B40B4C4BFB28504DE7B3F0066D6895B79B7C29B3F74A5358493E28D73D3B0D14D531EF6A1A4270C593E8D10EB3B246AE668DA94B2F65F3CC4E63BD6AA543B543E51327D426B983BD2E1A64CDB6E697C9BA4671DDCCCAFEC541716862CBDA37A8A1F3678CC75CE9E564F0A6A19EABDFB94EFB41CBDB586611757F7EEFFAD47B62C9A65931079DFD9ECAF4A451D8470491FEC1E5EAC6BB92D2F6E7D4B7418527C486478159F867591422ED7130CA98D5B274EBEBB139EA3579A6A81113A3A70921388898D18A4F5B56E8931D422108292B1BE3E8DD4FEB59E6C8B530AE54</code></pre>
|
||||
<!-- end p_q_inner_data_output -->
|
||||
<p>The length of the final string is 256 bytes.</p>
|
||||
<h5><a class="anchor" href="#5-send-req-dh-params-query-with-generated-encrypted-data" id="5-send-req-dh-params-query-with-generated-encrypted-data" name="5-send-req-dh-params-query-with-generated-encrypted-data"><i class="anchor-icon"></i></a>5) Send req_DH_params query with generated <code>encrypted_data</code></h5>
|
||||
<!-- start req_DH_params -->
|
||||
<p>Sent payload (excluding transport headers/trailers):</p>
|
||||
<pre><code>0000 | 00 00 00 00 00 00 00 00 B4 9A 03 00 DD A6 38 67
|
||||
0010 | 40 01 00 00 BE E4 12 D7 F2 FF EB DA 55 A0 62 61
|
||||
0020 | 90 B6 57 AC CD F3 9C 05 C8 97 E4 83 8C 1A 47 33
|
||||
0030 | D9 43 AB 98 93 64 1F B4 04 45 6D 69 FD 00 00 00
|
||||
0040 | 04 4E 94 76 C3 00 00 00 85 FD 64 DE 85 1D 9D D0
|
||||
0050 | FE 00 01 00 35 0F 55 A0 31 39 C6 65 B4 C0 3D 92
|
||||
0060 | B4 E0 2D 81 AB 71 F6 B7 BE 05 CA DB FA E6 78 22
|
||||
0070 | 3B 0D BB 53 19 2D 60 A9 AD 6A 9E 1A 36 EC 9E E3
|
||||
0080 | 3A 69 B7 AC D9 65 E4 88 C3 EC B8 59 DC 7D CA F9
|
||||
0090 | 30 3F 24 BA 38 55 6E C7 58 4A E5 44 8A 97 9B F7
|
||||
00A0 | 0F 03 1E BD 21 9F 37 95 20 9A 2D 07 A4 E0 9D EF
|
||||
00B0 | 29 63 84 58 CF 1A 37 98 D5 94 83 C8 F7 C8 FA 0D
|
||||
00C0 | 24 FE 31 67 6E 8A E9 D8 AB 10 AA 7C 07 02 A1 6C
|
||||
00D0 | C2 E0 96 C8 61 70 0D 07 3E 51 31 E7 16 A9 8F E1
|
||||
00E0 | 05 1A D5 85 26 F1 F1 51 AD AD D2 E1 9F 53 7E 71
|
||||
00F0 | 6C D5 55 83 30 DE DD E1 D4 9B E5 0A C2 0C E6 A0
|
||||
0100 | 40 82 3E B4 97 03 7B 49 FC A1 65 49 47 9A 4E 7A
|
||||
0110 | F3 D3 49 B9 07 E7 1F D3 2E 67 5B 48 7C B7 99 58
|
||||
0120 | 33 61 9B 81 85 F1 DC DA FD 73 09 30 2B 08 29 C1
|
||||
0130 | 8B 04 9C C7 96 F4 DC 7A 79 CE 49 D6 14 A9 23 04
|
||||
0140 | D6 7E A4 4A 1B 57 E7 0F A8 94 41 BD E0 DA 58 48
|
||||
0150 | 4A AC B6 66</code></pre>
|
||||
<pre><code>0000 | 00 00 00 00 00 00 00 00 D0 C4 07 00 09 A9 38 67
|
||||
0010 | 40 01 00 00 BE E4 12 D7 88 A0 0C B2 64 2E 0D CC
|
||||
0020 | D6 BD 55 3F 42 43 30 B4 8A 33 80 8D 1D 5B AE E2
|
||||
0030 | 7E 2D 08 4D AB 67 CE D0 04 41 27 77 4B 00 00 00
|
||||
0040 | 04 65 E4 43 17 00 00 00 85 FD 64 DE 85 1D 9D D0
|
||||
0050 | FE 00 01 00 61 9B 47 27 00 90 01 B4 40 82 01 3B
|
||||
0060 | 87 31 01 1A 98 4F 70 8C D5 D0 C2 53 FF 48 BD B3
|
||||
0070 | DF AF A2 63 7F FA 25 B4 0B 4C 4B FB 28 50 4D E7
|
||||
0080 | B3 F0 06 6D 68 95 B7 9B 7C 29 B3 F7 4A 53 58 49
|
||||
0090 | 3E 28 D7 3D 3B 0D 14 D5 31 EF 6A 1A 42 70 C5 93
|
||||
00A0 | E8 D1 0E B3 B2 46 AE 66 8D A9 4B 2F 65 F3 CC 4E
|
||||
00B0 | 63 BD 6A A5 43 B5 43 E5 13 27 D4 26 B9 83 BD 2E
|
||||
00C0 | 1A 64 CD B6 E6 97 C9 BA 46 71 DD CC CA FE C5 41
|
||||
00D0 | 71 68 62 CB DA 37 A8 A1 F3 67 8C C7 5C E9 E5 64
|
||||
00E0 | F0 A6 A1 9E AB DF B9 4E FB 41 CB DB 58 66 11 75
|
||||
00F0 | 7F 7E EF FA D4 7B 62 C9 A6 59 31 07 9D FD 9E CA
|
||||
0100 | F4 A4 51 D8 47 04 91 FE C1 E5 EA C6 BB 92 D2 F6
|
||||
0110 | E7 D4 B7 41 85 27 C4 86 47 81 59 F8 67 59 14 22
|
||||
0120 | ED 71 30 CA 98 D5 B2 74 EB EB B1 39 EA 35 79 A6
|
||||
0130 | A8 11 13 A3 A7 09 21 38 88 98 D1 8A 4F 5B 56 E8
|
||||
0140 | 93 1D 42 21 08 29 2B 1B E3 E8 DD 4F EB 59 E6 C8
|
||||
0150 | B5 30 AE 54</code></pre>
|
||||
<p>Payload (de)serialization:</p>
|
||||
<pre><code>req_DH_params#d712e4be nonce:int128 server_nonce:int128 p:string q:string public_key_fingerprint:long encrypted_data:string = Server_DH_Params;</code></pre>
|
||||
<table class="table">
|
||||
|
@ -345,7 +345,7 @@ random_padding_bytes = BE3707A89AE9B01B20AFBF2DFE2469A511655C0B8BC61714EB603611A
|
|||
<tr>
|
||||
<td>message_id</td>
|
||||
<td>8, 8</td>
|
||||
<td><code>B49A0300DDA63867</code></td>
|
||||
<td><code>D0C4070009A93867</code></td>
|
||||
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() << 32) + (N*4)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@ -363,25 +363,25 @@ random_padding_bytes = BE3707A89AE9B01B20AFBF2DFE2469A511655C0B8BC61714EB603611A
|
|||
<tr>
|
||||
<td>nonce</td>
|
||||
<td>24, 16</td>
|
||||
<td><code>F2FFEBDA55A0626190B657ACCDF39C05</code></td>
|
||||
<td><code>88A00CB2642E0DCCD6BD553F424330B4</code></td>
|
||||
<td>Value generated by client in Step 1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>server_nonce</td>
|
||||
<td>40, 16</td>
|
||||
<td><code>C897E4838C1A4733D943AB9893641FB4</code></td>
|
||||
<td><code>8A33808D1D5BAEE27E2D084DAB67CED0</code></td>
|
||||
<td>Value received from server in Step 2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>p</td>
|
||||
<td>56, 8</td>
|
||||
<td><code>04456D69FD000000</code><br>TL byte deserialization <br>=> bigendian conversion to decimal<br>=> 1164798461</td>
|
||||
<td><code>044127774B000000</code><br>TL byte deserialization <br>=> bigendian conversion to decimal<br>=> 1093105483</td>
|
||||
<td>First prime cofactor: single-byte prefix denoting length, 4-byte string, and three bytes of padding</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>q</td>
|
||||
<td>64, 8</td>
|
||||
<td><code>044E9476C3000000</code><br>TL byte deserialization <br>=> bigendian conversion to decimal<br>=> 1318352579</td>
|
||||
<td><code>0465E44317000000</code><br>TL byte deserialization <br>=> bigendian conversion to decimal<br>=> 1709458199</td>
|
||||
<td>Second prime cofactor: single-byte prefix denoting length, 4-byte string, and three bytes of padding</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@ -393,7 +393,7 @@ random_padding_bytes = BE3707A89AE9B01B20AFBF2DFE2469A511655C0B8BC61714EB603611A
|
|||
<tr>
|
||||
<td>encrypted_data</td>
|
||||
<td>80, 260</td>
|
||||
<td><code>FE000100350F55A03139C665B4C03D92</code> <code>B4E02D81AB71F6B7BE05CADBFAE67822</code> <code>3B0DBB53192D60A9AD6A9E1A36EC9EE3</code> <code>3A69B7ACD965E488C3ECB859DC7DCAF9</code> <code>303F24BA38556EC7584AE5448A979BF7</code> <code>0F031EBD219F3795209A2D07A4E09DEF</code> <code>29638458CF1A3798D59483C8F7C8FA0D</code> <code>24FE31676E8AE9D8AB10AA7C0702A16C</code> <code>C2E096C861700D073E5131E716A98FE1</code> <code>051AD58526F1F151ADADD2E19F537E71</code> <code>6CD5558330DEDDE1D49BE50AC20CE6A0</code> <code>40823EB497037B49FCA16549479A4E7A</code> <code>F3D349B907E71FD32E675B487CB79958</code> <code>33619B8185F1DCDAFD7309302B0829C1</code> <code>8B049CC796F4DC7A79CE49D614A92304</code> <code>D67EA44A1B57E70FA89441BDE0DA5848</code><br> <code>4AACB666</code></td>
|
||||
<td><code>FE000100619B4727009001B44082013B</code> <code>8731011A984F708CD5D0C253FF48BDB3</code> <code>DFAFA2637FFA25B40B4C4BFB28504DE7</code> <code>B3F0066D6895B79B7C29B3F74A535849</code> <code>3E28D73D3B0D14D531EF6A1A4270C593</code> <code>E8D10EB3B246AE668DA94B2F65F3CC4E</code> <code>63BD6AA543B543E51327D426B983BD2E</code> <code>1A64CDB6E697C9BA4671DDCCCAFEC541</code> <code>716862CBDA37A8A1F3678CC75CE9E564</code> <code>F0A6A19EABDFB94EFB41CBDB58661175</code> <code>7F7EEFFAD47B62C9A65931079DFD9ECA</code> <code>F4A451D8470491FEC1E5EAC6BB92D2F6</code> <code>E7D4B7418527C486478159F867591422</code> <code>ED7130CA98D5B274EBEBB139EA3579A6</code> <code>A81113A3A70921388898D18A4F5B56E8</code> <code>931D422108292B1BE3E8DD4FEB59E6C8</code><br> <code>B530AE54</code></td>
|
||||
<td>Value generated above</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
@ -402,47 +402,47 @@ random_padding_bytes = BE3707A89AE9B01B20AFBF2DFE2469A511655C0B8BC61714EB603611A
|
|||
<h5><a class="anchor" href="#6-server-responds-with" id="6-server-responds-with" name="6-server-responds-with"><i class="anchor-icon"></i></a>6) Server responds with:</h5>
|
||||
<!-- start server_DH_params_ok -->
|
||||
<p>Received payload (excluding transport headers/trailers):</p>
|
||||
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 CC BA 07 DE A6 38 67
|
||||
0010 | 78 02 00 00 5C 07 E8 D0 F2 FF EB DA 55 A0 62 61
|
||||
0020 | 90 B6 57 AC CD F3 9C 05 C8 97 E4 83 8C 1A 47 33
|
||||
0030 | D9 43 AB 98 93 64 1F B4 FE 50 02 00 CC E5 AA 8B
|
||||
0040 | 5B 16 C7 C7 A2 8D A6 86 A2 FD 61 D3 51 32 D4 B9
|
||||
0050 | 46 46 84 68 68 C8 E4 6F C7 C7 D5 E6 A2 3F 30 6D
|
||||
0060 | B5 15 8C 7D D2 F7 FC C0 12 84 12 04 8B D2 90 47
|
||||
0070 | FD 7C 46 57 09 B5 3E 99 E4 5E 6F 31 46 1B 93 59
|
||||
0080 | 64 7B AD 71 CA 63 8B 20 56 F5 E7 7F 60 2D 87 74
|
||||
0090 | 50 CC 8F FD 1D 00 D4 1A CB 77 52 23 CB BB 82 FF
|
||||
00A0 | B5 2D 1F BB B4 91 81 D7 7A 16 E2 11 18 CB A5 99
|
||||
00B0 | BD 7B F0 0B 4A 29 6E 70 FF 08 75 A3 BA 02 93 8A
|
||||
00C0 | 8B 8A ED A7 22 44 2E 97 8F FA C5 E9 1F 0C BA ED
|
||||
00D0 | 01 4E B0 DF A1 5C 10 A3 90 FE 07 D8 88 F7 3D C0
|
||||
00E0 | 25 B6 1F 89 D0 B0 23 2E A4 9F CA 25 78 EB 77 99
|
||||
00F0 | 2F 35 B2 FC 45 8F 50 5D 43 DC 83 5B C3 8A 2C 4B
|
||||
0100 | 5A FE 0C 72 5B 3B 7C 0E 0D 07 DB 18 D3 F9 C9 A8
|
||||
0110 | 39 34 9F A9 5F 11 48 1C AD 66 1C 6E 58 85 E5 80
|
||||
0120 | D2 C7 A1 B7 BF A7 79 C1 4E 09 9C 44 B2 5F 01 63
|
||||
0130 | F4 87 78 02 6D AF CA 02 1A F8 42 18 3F 02 AB 9E
|
||||
0140 | 42 3A 76 D4 92 67 83 BA 24 0D 23 42 52 1B CC 48
|
||||
0150 | D7 BC 7F 95 B3 3E E7 32 FF 2E 90 40 74 86 C4 DA
|
||||
0160 | 4F 98 B0 A0 65 CF A6 DA BA F7 45 77 D4 2A 4F 12
|
||||
0170 | 86 13 78 F4 79 9B 5C A7 6C 48 AF 2B DA 6F 4D A4
|
||||
0180 | 1E 6F 71 03 73 FA 5B 82 99 A9 AC 43 BC 6B 38 DA
|
||||
0190 | 72 D3 ED CB 09 32 D6 A5 D6 49 E4 D6 14 FA 1D 3F
|
||||
01A0 | 86 F9 7D 5F 3B D5 5C 10 6C 49 1C C6 8C 37 A8 24
|
||||
01B0 | 28 78 C5 85 EA E6 1F 66 1D FC 09 5C 9F 15 8B 7A
|
||||
01C0 | B0 F9 0D 6B A9 70 65 1D 0F E6 86 42 71 18 48 2D
|
||||
01D0 | 96 30 5A 4D F8 33 F6 6C 3E 2B F9 52 23 4E 31 88
|
||||
01E0 | D1 A3 B6 30 37 48 19 58 BB 97 DE 43 CA 62 1C 78
|
||||
01F0 | E1 E2 A0 3D 68 4F AC 4E D9 A5 B2 14 56 F0 B7 BF
|
||||
0200 | 6C 5A 47 21 9A F9 FA AC D1 00 DD 5B 0B E3 C3 88
|
||||
0210 | 3E C9 93 72 51 92 B8 97 FF D3 DA 0C 5A B7 75 BE
|
||||
0220 | FB 83 22 83 A9 02 E6 F6 FF 0D FF 5B 45 1F AB 3C
|
||||
0230 | 7A 7C F3 A0 47 C1 1F 86 87 39 7B DB 24 BE C9 04
|
||||
0240 | 53 26 62 74 BC 52 CE A4 59 29 3A 54 99 80 D0 E2
|
||||
0250 | 55 F4 59 16 BA 91 FB 33 38 C5 0C B1 7F AE E9 C1
|
||||
0260 | F6 F0 DE 9C 67 68 F9 D3 73 60 DE 5D E4 88 62 BD
|
||||
0270 | F9 E6 72 54 A2 7C 2D F5 6C D8 86 7A 00 A7 03 E8
|
||||
0280 | BE 5D 32 8C C7 EE 2B 45 90 54 FA AC</code></pre>
|
||||
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 80 DD F7 09 A9 38 67
|
||||
0010 | 78 02 00 00 5C 07 E8 D0 88 A0 0C B2 64 2E 0D CC
|
||||
0020 | D6 BD 55 3F 42 43 30 B4 8A 33 80 8D 1D 5B AE E2
|
||||
0030 | 7E 2D 08 4D AB 67 CE D0 FE 50 02 00 DB 11 E8 39
|
||||
0040 | 12 F4 51 CC E9 CC B5 A4 E2 71 95 CE 8D 9C 5E 74
|
||||
0050 | E8 79 AF 4B 91 80 40 0A 83 69 D0 27 7E 0A B8 DF
|
||||
0060 | 51 B5 3A EC 1C 2C 6E D2 D4 DA D5 40 FA 7E E1 B4
|
||||
0070 | B7 55 A1 E8 BA 3D BF 75 4D 81 6D 46 90 6B B5 4E
|
||||
0080 | 26 CD 79 8D 2A 33 CB 3B 3C FD 32 23 19 5F CD AB
|
||||
0090 | D5 74 3A B4 2E D4 26 62 35 50 38 FE 07 A9 2B 4A
|
||||
00A0 | 60 21 ED F2 A7 0A 86 5A DF DD 55 6A 93 23 EE 52
|
||||
00B0 | 6B 77 52 9D CA 6E CC 60 21 AB 76 B6 B2 9B 8D 42
|
||||
00C0 | 32 35 49 CF 73 81 96 55 87 FF EC C1 B4 23 43 A6
|
||||
00D0 | 90 B0 4A 4B FA 53 C3 B3 BF 61 80 AD 85 CB B4 72
|
||||
00E0 | BA 83 60 70 70 4F 54 07 A3 50 CC E6 E9 43 76 FE
|
||||
00F0 | BE 9D 92 F9 04 D5 1E 04 9A 12 F6 63 4E 0E A7 75
|
||||
0100 | 2C B2 AD 56 06 70 1F CD 2A CF 43 3A 7A 78 20 F6
|
||||
0110 | B9 4D 44 C0 FB 3D 9D EF 73 F6 AD 93 E4 A3 6C 2F
|
||||
0120 | AA 3E 22 40 C8 2C E2 A4 2D 72 21 28 E6 89 01 5D
|
||||
0130 | C9 5B 41 42 CD 09 BA 46 4D 9E A6 79 AA 70 86 0E
|
||||
0140 | A7 BC 95 93 15 3C 6F E4 20 83 2F A7 8C 2C C4 31
|
||||
0150 | 2F A6 A8 1E BD BD 61 22 43 B5 27 1B B2 ED CB 2F
|
||||
0160 | 64 29 28 90 25 2E AE C0 F6 E7 3C 5D A0 CF D8 A2
|
||||
0170 | 20 BB E2 F6 5A C3 CA E6 59 82 95 B5 42 30 CD 85
|
||||
0180 | F3 26 9A 95 FD FE E3 AE 04 C7 FE AC 11 34 BE 51
|
||||
0190 | 8E C7 BC AB 99 72 B4 9A 58 DB F3 8F D2 FF 60 92
|
||||
01A0 | 9E 6C BB 3A 95 CE 10 15 FD 92 77 59 A8 0D 69 D2
|
||||
01B0 | 8B 90 43 05 98 62 F7 3B 17 14 11 6A 4D 48 08 29
|
||||
01C0 | C8 C4 20 3F 6F 9D DD 34 AE 9F 5F A9 5A 0B 1F 64
|
||||
01D0 | D6 34 AB 3B BF 18 EC 74 66 D5 24 DA D7 35 4D 2E
|
||||
01E0 | 95 7E 3B 30 92 06 A8 EA 67 41 92 F5 6B 5E A3 C6
|
||||
01F0 | 3B B5 F4 56 62 80 1D 42 26 1E D8 0F 40 12 59 25
|
||||
0200 | 11 8D 6A 4D 56 0D 24 30 C8 BA 3E 89 FF E5 3B 29
|
||||
0210 | 20 52 B9 49 26 4C C9 87 23 BF F1 50 DC 65 E5 FF
|
||||
0220 | 2A F6 06 3A 7B E5 20 50 D7 10 9C F3 31 01 6F 6B
|
||||
0230 | E2 E9 E8 FE 32 19 1C 4D B9 A5 B3 FB C1 6A B5 A2
|
||||
0240 | 87 F9 D2 5C 69 22 5B 4B 89 40 A0 D4 A3 E6 2D DB
|
||||
0250 | 67 8B B1 A4 42 FB 71 55 1D 6B 43 F7 49 AD 46 EB
|
||||
0260 | F5 3D 32 27 41 83 4B 5C 2E D3 EA 3A 14 A5 5C AC
|
||||
0270 | E0 21 4D 1C E5 25 CD C9 39 9B 1C A2 40 8C BF BC
|
||||
0280 | 70 83 63 2F BD 93 45 E5 DD 25 B7 A3</code></pre>
|
||||
<p>Payload (de)serialization:</p>
|
||||
<pre><code>server_DH_params_ok#d0e8075c nonce:int128 server_nonce:int128 encrypted_answer:string = Server_DH_Params;</code></pre>
|
||||
<table class="table">
|
||||
|
@ -464,7 +464,7 @@ random_padding_bytes = BE3707A89AE9B01B20AFBF2DFE2469A511655C0B8BC61714EB603611A
|
|||
<tr>
|
||||
<td>message_id</td>
|
||||
<td>8, 8</td>
|
||||
<td><code>01CCBA07DEA63867</code></td>
|
||||
<td><code>0180DDF709A93867</code></td>
|
||||
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() << 32) + (N*4)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@ -482,19 +482,19 @@ random_padding_bytes = BE3707A89AE9B01B20AFBF2DFE2469A511655C0B8BC61714EB603611A
|
|||
<tr>
|
||||
<td>nonce</td>
|
||||
<td>24, 16</td>
|
||||
<td><code>F2FFEBDA55A0626190B657ACCDF39C05</code></td>
|
||||
<td><code>88A00CB2642E0DCCD6BD553F424330B4</code></td>
|
||||
<td>Value generated by client in Step 1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>server_nonce</td>
|
||||
<td>40, 16</td>
|
||||
<td><code>C897E4838C1A4733D943AB9893641FB4</code></td>
|
||||
<td><code>8A33808D1D5BAEE27E2D084DAB67CED0</code></td>
|
||||
<td>Value received from server in Step 2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>encrypted_answer</td>
|
||||
<td>56, 596</td>
|
||||
<td><code>FE500200CCE5AA8B5B16C7C7A28DA686</code> <code>A2FD61D35132D4B94646846868C8E46F</code> <code>C7C7D5E6A23F306DB5158C7DD2F7FCC0</code> <code>128412048BD29047FD7C465709B53E99</code> <code>E45E6F31461B9359647BAD71CA638B20</code> <code>56F5E77F602D877450CC8FFD1D00D41A</code> <code>CB775223CBBB82FFB52D1FBBB49181D7</code> <code>7A16E21118CBA599BD7BF00B4A296E70</code> <code>FF0875A3BA02938A8B8AEDA722442E97</code> <code>8FFAC5E91F0CBAED014EB0DFA15C10A3</code> <code>90FE07D888F73DC025B61F89D0B0232E</code> <code>A49FCA2578EB77992F35B2FC458F505D</code> <code>43DC835BC38A2C4B5AFE0C725B3B7C0E</code> <code>0D07DB18D3F9C9A839349FA95F11481C</code> <code>AD661C6E5885E580D2C7A1B7BFA779C1</code> <code>4E099C44B25F0163F48778026DAFCA02</code> <code>1AF842183F02AB9E423A76D4926783BA</code> <code>240D2342521BCC48D7BC7F95B33EE732</code> <code>FF2E90407486C4DA4F98B0A065CFA6DA</code> <code>BAF74577D42A4F12861378F4799B5CA7</code> <code>6C48AF2BDA6F4DA41E6F710373FA5B82</code> <code>99A9AC43BC6B38DA72D3EDCB0932D6A5</code> <code>D649E4D614FA1D3F86F97D5F3BD55C10</code> <code>6C491CC68C37A8242878C585EAE61F66</code> <code>1DFC095C9F158B7AB0F90D6BA970651D</code> <code>0FE686427118482D96305A4DF833F66C</code> <code>3E2BF952234E3188D1A3B63037481958</code> <code>BB97DE43CA621C78E1E2A03D684FAC4E</code> <code>D9A5B21456F0B7BF6C5A47219AF9FAAC</code> <code>D100DD5B0BE3C3883EC993725192B897</code> <code>FFD3DA0C5AB775BEFB832283A902E6F6</code> <code>FF0DFF5B451FAB3C7A7CF3A047C11F86</code> <code>87397BDB24BEC90453266274BC52CEA4</code> <code>59293A549980D0E255F45916BA91FB33</code> <code>38C50CB17FAEE9C1F6F0DE9C6768F9D3</code> <code>7360DE5DE48862BDF9E67254A27C2DF5</code> <code>6CD8867A00A703E8BE5D328CC7EE2B45</code><br> <code>9054FAAC</code></td>
|
||||
<td><code>FE500200DB11E83912F451CCE9CCB5A4</code> <code>E27195CE8D9C5E74E879AF4B9180400A</code> <code>8369D0277E0AB8DF51B53AEC1C2C6ED2</code> <code>D4DAD540FA7EE1B4B755A1E8BA3DBF75</code> <code>4D816D46906BB54E26CD798D2A33CB3B</code> <code>3CFD3223195FCDABD5743AB42ED42662</code> <code>355038FE07A92B4A6021EDF2A70A865A</code> <code>DFDD556A9323EE526B77529DCA6ECC60</code> <code>21AB76B6B29B8D42323549CF73819655</code> <code>87FFECC1B42343A690B04A4BFA53C3B3</code> <code>BF6180AD85CBB472BA836070704F5407</code> <code>A350CCE6E94376FEBE9D92F904D51E04</code> <code>9A12F6634E0EA7752CB2AD5606701FCD</code> <code>2ACF433A7A7820F6B94D44C0FB3D9DEF</code> <code>73F6AD93E4A36C2FAA3E2240C82CE2A4</code> <code>2D722128E689015DC95B4142CD09BA46</code> <code>4D9EA679AA70860EA7BC9593153C6FE4</code> <code>20832FA78C2CC4312FA6A81EBDBD6122</code> <code>43B5271BB2EDCB2F64292890252EAEC0</code> <code>F6E73C5DA0CFD8A220BBE2F65AC3CAE6</code> <code>598295B54230CD85F3269A95FDFEE3AE</code> <code>04C7FEAC1134BE518EC7BCAB9972B49A</code> <code>58DBF38FD2FF60929E6CBB3A95CE1015</code> <code>FD927759A80D69D28B9043059862F73B</code> <code>1714116A4D480829C8C4203F6F9DDD34</code> <code>AE9F5FA95A0B1F64D634AB3BBF18EC74</code> <code>66D524DAD7354D2E957E3B309206A8EA</code> <code>674192F56B5EA3C63BB5F45662801D42</code> <code>261ED80F40125925118D6A4D560D2430</code> <code>C8BA3E89FFE53B292052B949264CC987</code> <code>23BFF150DC65E5FF2AF6063A7BE52050</code> <code>D7109CF331016F6BE2E9E8FE32191C4D</code> <code>B9A5B3FBC16AB5A287F9D25C69225B4B</code> <code>8940A0D4A3E62DDB678BB1A442FB7155</code> <code>1D6B43F749AD46EBF53D322741834B5C</code> <code>2ED3EA3A14A55CACE0214D1CE525CDC9</code> <code>399B1CA2408CBFBC7083632FBD9345E5</code><br> <code>DD25B7A3</code></td>
|
||||
<td>See below</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
@ -502,20 +502,20 @@ random_padding_bytes = BE3707A89AE9B01B20AFBF2DFE2469A511655C0B8BC61714EB603611A
|
|||
<!-- end server_DH_params_ok -->
|
||||
<p>Decrypt <code>encrypted_answer</code> using the reverse of the process specified in <a href="/mtproto/auth_key#6-server-responds-with">step 6</a>:</p>
|
||||
<!-- start server_DH_inner_data_input -->
|
||||
<pre><code>encrypted_answer = CCE5AA8B5B16C7C7A28DA686A2FD61D35132D4B94646846868C8E46FC7C7D5E6A23F306DB5158C7DD2F7FCC0128412048BD29047FD7C465709B53E99E45E6F31461B9359647BAD71CA638B2056F5E77F602D877450CC8FFD1D00D41ACB775223CBBB82FFB52D1FBBB49181D77A16E21118CBA599BD7BF00B4A296E70FF0875A3BA02938A8B8AEDA722442E978FFAC5E91F0CBAED014EB0DFA15C10A390FE07D888F73DC025B61F89D0B0232EA49FCA2578EB77992F35B2FC458F505D43DC835BC38A2C4B5AFE0C725B3B7C0E0D07DB18D3F9C9A839349FA95F11481CAD661C6E5885E580D2C7A1B7BFA779C14E099C44B25F0163F48778026DAFCA021AF842183F02AB9E423A76D4926783BA240D2342521BCC48D7BC7F95B33EE732FF2E90407486C4DA4F98B0A065CFA6DABAF74577D42A4F12861378F4799B5CA76C48AF2BDA6F4DA41E6F710373FA5B8299A9AC43BC6B38DA72D3EDCB0932D6A5D649E4D614FA1D3F86F97D5F3BD55C106C491CC68C37A8242878C585EAE61F661DFC095C9F158B7AB0F90D6BA970651D0FE686427118482D96305A4DF833F66C3E2BF952234E3188D1A3B63037481958BB97DE43CA621C78E1E2A03D684FAC4ED9A5B21456F0B7BF6C5A47219AF9FAACD100DD5B0BE3C3883EC993725192B897FFD3DA0C5AB775BEFB832283A902E6F6FF0DFF5B451FAB3C7A7CF3A047C11F8687397BDB24BEC90453266274BC52CEA459293A549980D0E255F45916BA91FB3338C50CB17FAEE9C1F6F0DE9C6768F9D37360DE5DE48862BDF9E67254A27C2DF56CD8867A00A703E8BE5D328CC7EE2B459054FAAC
|
||||
tmp_aes_key = 594061AE8790464CD895F4EC6E87183395A1D3030D30F301DC4BEA649F715D0E
|
||||
tmp_aes_iv = 4D77BC1E9C065F093B95359EA200FB0DBB6499A2A2356E2764FA3EC11183DF59</code></pre>
|
||||
<pre><code>encrypted_answer = DB11E83912F451CCE9CCB5A4E27195CE8D9C5E74E879AF4B9180400A8369D0277E0AB8DF51B53AEC1C2C6ED2D4DAD540FA7EE1B4B755A1E8BA3DBF754D816D46906BB54E26CD798D2A33CB3B3CFD3223195FCDABD5743AB42ED42662355038FE07A92B4A6021EDF2A70A865ADFDD556A9323EE526B77529DCA6ECC6021AB76B6B29B8D42323549CF7381965587FFECC1B42343A690B04A4BFA53C3B3BF6180AD85CBB472BA836070704F5407A350CCE6E94376FEBE9D92F904D51E049A12F6634E0EA7752CB2AD5606701FCD2ACF433A7A7820F6B94D44C0FB3D9DEF73F6AD93E4A36C2FAA3E2240C82CE2A42D722128E689015DC95B4142CD09BA464D9EA679AA70860EA7BC9593153C6FE420832FA78C2CC4312FA6A81EBDBD612243B5271BB2EDCB2F64292890252EAEC0F6E73C5DA0CFD8A220BBE2F65AC3CAE6598295B54230CD85F3269A95FDFEE3AE04C7FEAC1134BE518EC7BCAB9972B49A58DBF38FD2FF60929E6CBB3A95CE1015FD927759A80D69D28B9043059862F73B1714116A4D480829C8C4203F6F9DDD34AE9F5FA95A0B1F64D634AB3BBF18EC7466D524DAD7354D2E957E3B309206A8EA674192F56B5EA3C63BB5F45662801D42261ED80F40125925118D6A4D560D2430C8BA3E89FFE53B292052B949264CC98723BFF150DC65E5FF2AF6063A7BE52050D7109CF331016F6BE2E9E8FE32191C4DB9A5B3FBC16AB5A287F9D25C69225B4B8940A0D4A3E62DDB678BB1A442FB71551D6B43F749AD46EBF53D322741834B5C2ED3EA3A14A55CACE0214D1CE525CDC9399B1CA2408CBFBC7083632FBD9345E5DD25B7A3
|
||||
tmp_aes_key = 010C0C9B7A484D3A0D5BE8A9D860F7037247338A949243ABFD2598EA8BAFE4D1
|
||||
tmp_aes_iv = E9737E2AA80D0D0FC0161512F6069DF0654F7B84D8A2C4679359DF78C61C4CB1</code></pre>
|
||||
<!-- end server_DH_inner_data_input -->
|
||||
<p>Yielding:</p>
|
||||
<!-- start server_DH_inner_data_output -->
|
||||
<pre><code>answer_with_hash = 8EC374A6E5C8D1351060184DB3D5F334AD204BE5BA0D89B5F2FFEBDA55A0626190B657ACCDF39C05C897E4838C1A4733D943AB9893641FB403000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE00010047BFBF1B479D5A20E74889EF9CEECE80F9135067904A56B6EF0C4A30374085607A674D2C84C442956816AC2A72F835BAE1DDE4CB1735741A9306529EA3C143B85977FA6E2B2187F1F26ECF6D20281FC0AD417084F3DD54DE11ADE3DB7D3D9260184537FF353F4B0D02421D41B9F10A6DD2025F5637D5AB7A3115B9238F83E1BE9029A0FC444E5F516EC3E4E7508F12209ED9ED543E8BDF86B12F878C7DD35FAF9175234AA78D92A8AA4AD4AB38951F26A7AB03B00B5697C40587D31A320F1A87A8C6F6D5ACC40B04C0D4C927658C40CC014FC2FF678B78F818AA961B4AB61D7ADFD6E68BB3B180027FCF76D164852891E16CDAD45209B9EC8FA7D26E409E75E7DEA63867AEE470C76CBBBB02
|
||||
answer = BA0D89B5F2FFEBDA55A0626190B657ACCDF39C05C897E4838C1A4733D943AB9893641FB403000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE00010047BFBF1B479D5A20E74889EF9CEECE80F9135067904A56B6EF0C4A30374085607A674D2C84C442956816AC2A72F835BAE1DDE4CB1735741A9306529EA3C143B85977FA6E2B2187F1F26ECF6D20281FC0AD417084F3DD54DE11ADE3DB7D3D9260184537FF353F4B0D02421D41B9F10A6DD2025F5637D5AB7A3115B9238F83E1BE9029A0FC444E5F516EC3E4E7508F12209ED9ED543E8BDF86B12F878C7DD35FAF9175234AA78D92A8AA4AD4AB38951F26A7AB03B00B5697C40587D31A320F1A87A8C6F6D5ACC40B04C0D4C927658C40CC014FC2FF678B78F818AA961B4AB61D7ADFD6E68BB3B180027FCF76D164852891E16CDAD45209B9EC8FA7D26E409E75E7DEA63867AEE470C76CBBBB02</code></pre>
|
||||
<pre><code>answer_with_hash = 7FC0273CC2008BCABACC587CFFDEA36CC61A2195BA0D89B588A00CB2642E0DCCD6BD553F424330B48A33808D1D5BAEE27E2D084DAB67CED003000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100793E8C3BC9C45F094D11A4277C747A11D65D3B6F5C97D8320D4BE76ABF41C4D8EFB57AFE6B0C1C7E7A5F073BA509FADE1E20DEFE69CBEC0864C94A9778B40FD57EEBBCEDA4E088AA20C71F5F289E8CC4D202DF73C621BBDFA750255F05518CAE0E58EE6EA7A0319A5B23CBDE0B146EABE42B7022AA71074D6E9164063ABA342920779D5D253FB48EB9B9BDA2A9EF56833829FE1FB199ACDC85C853D97FE9D0B69159A4826777C28AB3024D1C41F9FF53815ACB7E3105D3E21AAB984CC110498298E55BEDE751A3E7ECD357D884ACA32F6E2E0CA121FDD7792B9C3E9D19B685AEE66EA166BCED647F2BF6F036C9B6513B2D95BD6E411B46EC9F21916CD1259B5809A938674022F989DA20AE22
|
||||
answer = BA0D89B588A00CB2642E0DCCD6BD553F424330B48A33808D1D5BAEE27E2D084DAB67CED003000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100793E8C3BC9C45F094D11A4277C747A11D65D3B6F5C97D8320D4BE76ABF41C4D8EFB57AFE6B0C1C7E7A5F073BA509FADE1E20DEFE69CBEC0864C94A9778B40FD57EEBBCEDA4E088AA20C71F5F289E8CC4D202DF73C621BBDFA750255F05518CAE0E58EE6EA7A0319A5B23CBDE0B146EABE42B7022AA71074D6E9164063ABA342920779D5D253FB48EB9B9BDA2A9EF56833829FE1FB199ACDC85C853D97FE9D0B69159A4826777C28AB3024D1C41F9FF53815ACB7E3105D3E21AAB984CC110498298E55BEDE751A3E7ECD357D884ACA32F6E2E0CA121FDD7792B9C3E9D19B685AEE66EA166BCED647F2BF6F036C9B6513B2D95BD6E411B46EC9F21916CD1259B5809A938674022F989DA20AE22</code></pre>
|
||||
<!-- end server_DH_inner_data_output -->
|
||||
<!-- start server_DH_inner_data -->
|
||||
<p>Generated payload (excluding transport headers/trailers):</p>
|
||||
<pre><code>0000 | BA 0D 89 B5 F2 FF EB DA 55 A0 62 61 90 B6 57 AC
|
||||
0010 | CD F3 9C 05 C8 97 E4 83 8C 1A 47 33 D9 43 AB 98
|
||||
0020 | 93 64 1F B4 03 00 00 00 FE 00 01 00 C7 1C AE B9
|
||||
<pre><code>0000 | BA 0D 89 B5 88 A0 0C B2 64 2E 0D CC D6 BD 55 3F
|
||||
0010 | 42 43 30 B4 8A 33 80 8D 1D 5B AE E2 7E 2D 08 4D
|
||||
0020 | AB 67 CE D0 03 00 00 00 FE 00 01 00 C7 1C AE B9
|
||||
0030 | C6 B1 C9 04 8E 6C 52 2F 70 F1 3F 73 98 0D 40 23
|
||||
0040 | 8E 3E 21 C1 49 34 D0 37 56 3D 93 0F 48 19 8A 0A
|
||||
0050 | A7 C1 40 58 22 94 93 D2 25 30 F4 DB FA 33 6F 6E
|
||||
|
@ -532,23 +532,23 @@ answer = BA0D89B5F2FFEBDA55A0626190B657ACCDF39C05C897E4838C1A4733D943AB9893641FB
|
|||
0100 | F4 7B F9 59 D9 56 85 0C E9 29 85 1F 0D 81 15 F6
|
||||
0110 | 35 B1 05 EE 2E 4E 15 D0 4B 24 54 BF 6F 4F AD F0
|
||||
0120 | 34 B1 04 03 11 9C D8 E3 B9 2F CC 5B FE 00 01 00
|
||||
0130 | 47 BF BF 1B 47 9D 5A 20 E7 48 89 EF 9C EE CE 80
|
||||
0140 | F9 13 50 67 90 4A 56 B6 EF 0C 4A 30 37 40 85 60
|
||||
0150 | 7A 67 4D 2C 84 C4 42 95 68 16 AC 2A 72 F8 35 BA
|
||||
0160 | E1 DD E4 CB 17 35 74 1A 93 06 52 9E A3 C1 43 B8
|
||||
0170 | 59 77 FA 6E 2B 21 87 F1 F2 6E CF 6D 20 28 1F C0
|
||||
0180 | AD 41 70 84 F3 DD 54 DE 11 AD E3 DB 7D 3D 92 60
|
||||
0190 | 18 45 37 FF 35 3F 4B 0D 02 42 1D 41 B9 F1 0A 6D
|
||||
01A0 | D2 02 5F 56 37 D5 AB 7A 31 15 B9 23 8F 83 E1 BE
|
||||
01B0 | 90 29 A0 FC 44 4E 5F 51 6E C3 E4 E7 50 8F 12 20
|
||||
01C0 | 9E D9 ED 54 3E 8B DF 86 B1 2F 87 8C 7D D3 5F AF
|
||||
01D0 | 91 75 23 4A A7 8D 92 A8 AA 4A D4 AB 38 95 1F 26
|
||||
01E0 | A7 AB 03 B0 0B 56 97 C4 05 87 D3 1A 32 0F 1A 87
|
||||
01F0 | A8 C6 F6 D5 AC C4 0B 04 C0 D4 C9 27 65 8C 40 CC
|
||||
0200 | 01 4F C2 FF 67 8B 78 F8 18 AA 96 1B 4A B6 1D 7A
|
||||
0210 | DF D6 E6 8B B3 B1 80 02 7F CF 76 D1 64 85 28 91
|
||||
0220 | E1 6C DA D4 52 09 B9 EC 8F A7 D2 6E 40 9E 75 E7
|
||||
0230 | DE A6 38 67</code></pre>
|
||||
0130 | 79 3E 8C 3B C9 C4 5F 09 4D 11 A4 27 7C 74 7A 11
|
||||
0140 | D6 5D 3B 6F 5C 97 D8 32 0D 4B E7 6A BF 41 C4 D8
|
||||
0150 | EF B5 7A FE 6B 0C 1C 7E 7A 5F 07 3B A5 09 FA DE
|
||||
0160 | 1E 20 DE FE 69 CB EC 08 64 C9 4A 97 78 B4 0F D5
|
||||
0170 | 7E EB BC ED A4 E0 88 AA 20 C7 1F 5F 28 9E 8C C4
|
||||
0180 | D2 02 DF 73 C6 21 BB DF A7 50 25 5F 05 51 8C AE
|
||||
0190 | 0E 58 EE 6E A7 A0 31 9A 5B 23 CB DE 0B 14 6E AB
|
||||
01A0 | E4 2B 70 22 AA 71 07 4D 6E 91 64 06 3A BA 34 29
|
||||
01B0 | 20 77 9D 5D 25 3F B4 8E B9 B9 BD A2 A9 EF 56 83
|
||||
01C0 | 38 29 FE 1F B1 99 AC DC 85 C8 53 D9 7F E9 D0 B6
|
||||
01D0 | 91 59 A4 82 67 77 C2 8A B3 02 4D 1C 41 F9 FF 53
|
||||
01E0 | 81 5A CB 7E 31 05 D3 E2 1A AB 98 4C C1 10 49 82
|
||||
01F0 | 98 E5 5B ED E7 51 A3 E7 EC D3 57 D8 84 AC A3 2F
|
||||
0200 | 6E 2E 0C A1 21 FD D7 79 2B 9C 3E 9D 19 B6 85 AE
|
||||
0210 | E6 6E A1 66 BC ED 64 7F 2B F6 F0 36 C9 B6 51 3B
|
||||
0220 | 2D 95 BD 6E 41 1B 46 EC 9F 21 91 6C D1 25 9B 58
|
||||
0230 | 09 A9 38 67</code></pre>
|
||||
<p>Payload (de)serialization:</p>
|
||||
<pre><code>server_DH_inner_data#b5890dba nonce:int128 server_nonce:int128 g:int dh_prime:string g_a:string server_time:int = Server_DH_inner_data;</code></pre>
|
||||
<table class="table">
|
||||
|
@ -570,13 +570,13 @@ answer = BA0D89B5F2FFEBDA55A0626190B657ACCDF39C05C897E4838C1A4733D943AB9893641FB
|
|||
<tr>
|
||||
<td>nonce</td>
|
||||
<td>4, 16</td>
|
||||
<td><code>F2FFEBDA55A0626190B657ACCDF39C05</code></td>
|
||||
<td><code>88A00CB2642E0DCCD6BD553F424330B4</code></td>
|
||||
<td>Value generated by client in Step 1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>server_nonce</td>
|
||||
<td>20, 16</td>
|
||||
<td><code>C897E4838C1A4733D943AB9893641FB4</code></td>
|
||||
<td><code>8A33808D1D5BAEE27E2D084DAB67CED0</code></td>
|
||||
<td>Value received from server in Step 2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@ -594,13 +594,13 @@ answer = BA0D89B5F2FFEBDA55A0626190B657ACCDF39C05C897E4838C1A4733D943AB9893641FB
|
|||
<tr>
|
||||
<td>g_a</td>
|
||||
<td>300, 260</td>
|
||||
<td><code>FE00010047BFBF1B479D5A20E74889EF</code> <code>9CEECE80F9135067904A56B6EF0C4A30</code> <code>374085607A674D2C84C442956816AC2A</code> <code>72F835BAE1DDE4CB1735741A9306529E</code> <code>A3C143B85977FA6E2B2187F1F26ECF6D</code> <code>20281FC0AD417084F3DD54DE11ADE3DB</code> <code>7D3D9260184537FF353F4B0D02421D41</code> <code>B9F10A6DD2025F5637D5AB7A3115B923</code> <code>8F83E1BE9029A0FC444E5F516EC3E4E7</code> <code>508F12209ED9ED543E8BDF86B12F878C</code> <code>7DD35FAF9175234AA78D92A8AA4AD4AB</code> <code>38951F26A7AB03B00B5697C40587D31A</code> <code>320F1A87A8C6F6D5ACC40B04C0D4C927</code> <code>658C40CC014FC2FF678B78F818AA961B</code> <code>4AB61D7ADFD6E68BB3B180027FCF76D1</code> <code>64852891E16CDAD45209B9EC8FA7D26E</code><br> <code>409E75E7</code></td>
|
||||
<td><code>FE000100793E8C3BC9C45F094D11A427</code> <code>7C747A11D65D3B6F5C97D8320D4BE76A</code> <code>BF41C4D8EFB57AFE6B0C1C7E7A5F073B</code> <code>A509FADE1E20DEFE69CBEC0864C94A97</code> <code>78B40FD57EEBBCEDA4E088AA20C71F5F</code> <code>289E8CC4D202DF73C621BBDFA750255F</code> <code>05518CAE0E58EE6EA7A0319A5B23CBDE</code> <code>0B146EABE42B7022AA71074D6E916406</code> <code>3ABA342920779D5D253FB48EB9B9BDA2</code> <code>A9EF56833829FE1FB199ACDC85C853D9</code> <code>7FE9D0B69159A4826777C28AB3024D1C</code> <code>41F9FF53815ACB7E3105D3E21AAB984C</code> <code>C110498298E55BEDE751A3E7ECD357D8</code> <code>84ACA32F6E2E0CA121FDD7792B9C3E9D</code> <code>19B685AEE66EA166BCED647F2BF6F036</code> <code>C9B6513B2D95BD6E411B46EC9F21916C</code><br> <code>D1259B58</code></td>
|
||||
<td><code>g_a</code> diffie-hellman parameter</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>server_time</td>
|
||||
<td>560, 4</td>
|
||||
<td><code>DEA63867</code> (1731765982 in decimal)</td>
|
||||
<td><code>09A93867</code> (1731766537 in decimal)</td>
|
||||
<td>Server time</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
@ -609,34 +609,34 @@ answer = BA0D89B5F2FFEBDA55A0626190B657ACCDF39C05C897E4838C1A4733D943AB9893641FB
|
|||
<h5><a class="anchor" href="#7-client-computes-random-2048-bit-number-b-using-a-sufficient-amount-of-entropy-and-sends-the-server-a-message" id="7-client-computes-random-2048-bit-number-b-using-a-sufficient-amount-of-entropy-and-sends-the-server-a-message" name="7-client-computes-random-2048-bit-number-b-using-a-sufficient-amount-of-entropy-and-sends-the-server-a-message"><i class="anchor-icon"></i></a>7) Client computes random 2048-bit number <em>b</em> (using a sufficient amount of entropy) and sends the server a message</h5>
|
||||
<p>First, generate a secure random 2048-bit number b:</p>
|
||||
<!-- start b -->
|
||||
<pre><code>b = 192B33AF8896B004B5697EC9E8EDAB4C1F3D89312A51FD8FE4768D5B19AB55938FB45F9CDECAC165721285AB40E02100FC8768D54ED0C0AE5C3CEA32985EB22F112FAF76CFFE9CFF737ADEEBA9BC3498B342D6100FDD277D96F677960EDC2215527707ECAC55A1058581DF461948548D9D60714A5ED62F4CB4A1BA8DCAC0209DFA75E17D7AE8F09054442BB3EC20360665EDF5B1D67432F2AF9A761B3338CD6C31B47F78D81BD23E8548E23D5CE8AF796ECCC26D1C24E8CC7D08774C60BB1FCE5ACB3B9B6CC2B99FA72B1B2719E0107AA084FAF9BDC79A18D9B8DDBC101D6FA3C13D7D9E2F5DD127661626DD7A65148ED4135E6A19F1ADC0CA709A8A04603368</code></pre>
|
||||
<pre><code>b = 8487CEEC95B08B349E56A2EACC775D5DB3AC7B0E231A6EFEB194B2305C10385F0DC79C589C5C38A446BB353DF4BBECFF96E2EDE7EEAC4384FBCD82CB8BC31C65FC38D69796691FDF314501CB010F486A677BB4638344DCC3A0A307F6A2F38AE1DF7B43D6BD00FF42121D15FE30B7FE307816771ECB9BCDF97E08CD0FFF783191B1FAEFECF533050252921FEA2D6DF31FFBBD62B5F836A07BCA342F2EE325D6D70706477D0E22234F25A427E561D2E276C9204E484A6F184C7462AB56DEB18A16EC4668EBCE28569275A36F59D05CD4D1D731531DD0B8633E87801DCAF5736E6BEE06C7A3AE7E47EAE3B53D35D4BB23EB1597048FFBC38A28F2B7E72D60147401</code></pre>
|
||||
<!-- end b -->
|
||||
<p>Then compute <code>g_b = pow(g, b) mod dh_prime</code></p>
|
||||
<!-- start g_b -->
|
||||
<pre><code>g_b = 35A300F632B557BCF18A927A4DE8AFFCAFF852DB2AB3F43FF3D2CC1B902B1126BD4FA49B87DE3F92184EEC68EBD16345E4D4B33C2816637FA8BECABC99C6028300E6B9304CB0A182916F6D9C865619D3993367E8FF6FC4E797C57E654A673C8712D4E07A9E64C1B4157C2C9624DF295B285BB044A45EC45CBC2A10649E02B2239072393E6AC72068136B884BBC418E024BF8A8DD12DBB534EFFF235B5E78AABB524CED3E2C18C607F9832066AF940BA10E30A299B0AC55E1B45864FA54A587D7ACE194868027A98F69595725E1AC03095E37C04861AE41BE642BB9244619509FB3453CF8325BDB0077AF51AD276D937F8618EEA693C6A116BF05B02AE956AC65</code></pre>
|
||||
<pre><code>g_b = 6E9707456F57D1A5BA110E879B97A146952B760195EEE9B09A4416D13A60C4F3DC4F267EFB3EF6009D2E08B31E8097391583C3D63C9938D376D10A1934F2514F4C2938B7B76E3F59DA8C5B20FF08F1922A37808104CAE3DA3A395AF2EF5D4C1C9690BCE32066A1A082B88CFC5086F999AB7E847B4518EEFA8E6C2AB4E5988C93EC2EED9D264F3D297E7225921F87A70A7292F564E55F22C21116C3120ECA708B8171A690CE5E85676695669F581F702B8D99A42BBD927677AB6AEC82F714DB0C8096654171A913D91602D458F2E53BB2689F1D75BAECFAD5702447F679C2D326A67FD5A356E236018A4DC1A8315F5BD35ADDCA421A0DE3BDB4B55E2B8DA578E4</code></pre>
|
||||
<!-- end g_b -->
|
||||
<h6>7.1) generation of encrypted_data</h6>
|
||||
<!-- start client_DH_inner_data -->
|
||||
<p>Generated payload (excluding transport headers/trailers):</p>
|
||||
<pre><code>0000 | 54 B6 43 66 F2 FF EB DA 55 A0 62 61 90 B6 57 AC
|
||||
0010 | CD F3 9C 05 C8 97 E4 83 8C 1A 47 33 D9 43 AB 98
|
||||
0020 | 93 64 1F B4 00 00 00 00 00 00 00 00 FE 00 01 00
|
||||
0030 | 35 A3 00 F6 32 B5 57 BC F1 8A 92 7A 4D E8 AF FC
|
||||
0040 | AF F8 52 DB 2A B3 F4 3F F3 D2 CC 1B 90 2B 11 26
|
||||
0050 | BD 4F A4 9B 87 DE 3F 92 18 4E EC 68 EB D1 63 45
|
||||
0060 | E4 D4 B3 3C 28 16 63 7F A8 BE CA BC 99 C6 02 83
|
||||
0070 | 00 E6 B9 30 4C B0 A1 82 91 6F 6D 9C 86 56 19 D3
|
||||
0080 | 99 33 67 E8 FF 6F C4 E7 97 C5 7E 65 4A 67 3C 87
|
||||
0090 | 12 D4 E0 7A 9E 64 C1 B4 15 7C 2C 96 24 DF 29 5B
|
||||
00A0 | 28 5B B0 44 A4 5E C4 5C BC 2A 10 64 9E 02 B2 23
|
||||
00B0 | 90 72 39 3E 6A C7 20 68 13 6B 88 4B BC 41 8E 02
|
||||
00C0 | 4B F8 A8 DD 12 DB B5 34 EF FF 23 5B 5E 78 AA BB
|
||||
00D0 | 52 4C ED 3E 2C 18 C6 07 F9 83 20 66 AF 94 0B A1
|
||||
00E0 | 0E 30 A2 99 B0 AC 55 E1 B4 58 64 FA 54 A5 87 D7
|
||||
00F0 | AC E1 94 86 80 27 A9 8F 69 59 57 25 E1 AC 03 09
|
||||
0100 | 5E 37 C0 48 61 AE 41 BE 64 2B B9 24 46 19 50 9F
|
||||
0110 | B3 45 3C F8 32 5B DB 00 77 AF 51 AD 27 6D 93 7F
|
||||
0120 | 86 18 EE A6 93 C6 A1 16 BF 05 B0 2A E9 56 AC 65</code></pre>
|
||||
<pre><code>0000 | 54 B6 43 66 88 A0 0C B2 64 2E 0D CC D6 BD 55 3F
|
||||
0010 | 42 43 30 B4 8A 33 80 8D 1D 5B AE E2 7E 2D 08 4D
|
||||
0020 | AB 67 CE D0 00 00 00 00 00 00 00 00 FE 00 01 00
|
||||
0030 | 6E 97 07 45 6F 57 D1 A5 BA 11 0E 87 9B 97 A1 46
|
||||
0040 | 95 2B 76 01 95 EE E9 B0 9A 44 16 D1 3A 60 C4 F3
|
||||
0050 | DC 4F 26 7E FB 3E F6 00 9D 2E 08 B3 1E 80 97 39
|
||||
0060 | 15 83 C3 D6 3C 99 38 D3 76 D1 0A 19 34 F2 51 4F
|
||||
0070 | 4C 29 38 B7 B7 6E 3F 59 DA 8C 5B 20 FF 08 F1 92
|
||||
0080 | 2A 37 80 81 04 CA E3 DA 3A 39 5A F2 EF 5D 4C 1C
|
||||
0090 | 96 90 BC E3 20 66 A1 A0 82 B8 8C FC 50 86 F9 99
|
||||
00A0 | AB 7E 84 7B 45 18 EE FA 8E 6C 2A B4 E5 98 8C 93
|
||||
00B0 | EC 2E ED 9D 26 4F 3D 29 7E 72 25 92 1F 87 A7 0A
|
||||
00C0 | 72 92 F5 64 E5 5F 22 C2 11 16 C3 12 0E CA 70 8B
|
||||
00D0 | 81 71 A6 90 CE 5E 85 67 66 95 66 9F 58 1F 70 2B
|
||||
00E0 | 8D 99 A4 2B BD 92 76 77 AB 6A EC 82 F7 14 DB 0C
|
||||
00F0 | 80 96 65 41 71 A9 13 D9 16 02 D4 58 F2 E5 3B B2
|
||||
0100 | 68 9F 1D 75 BA EC FA D5 70 24 47 F6 79 C2 D3 26
|
||||
0110 | A6 7F D5 A3 56 E2 36 01 8A 4D C1 A8 31 5F 5B D3
|
||||
0120 | 5A DD CA 42 1A 0D E3 BD B4 B5 5E 2B 8D A5 78 E4</code></pre>
|
||||
<p>Payload (de)serialization:</p>
|
||||
<pre><code>client_DH_inner_data#6643b654 nonce:int128 server_nonce:int128 retry_id:long g_b:string = Client_DH_Inner_Data;</code></pre>
|
||||
<table class="table">
|
||||
|
@ -658,19 +658,19 @@ answer = BA0D89B5F2FFEBDA55A0626190B657ACCDF39C05C897E4838C1A4733D943AB9893641FB
|
|||
<tr>
|
||||
<td>nonce</td>
|
||||
<td>4, 16</td>
|
||||
<td><code>F2FFEBDA55A0626190B657ACCDF39C05</code></td>
|
||||
<td><code>88A00CB2642E0DCCD6BD553F424330B4</code></td>
|
||||
<td>Value generated by client in Step 1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>server_nonce</td>
|
||||
<td>20, 16</td>
|
||||
<td><code>C897E4838C1A4733D943AB9893641FB4</code></td>
|
||||
<td><code>8A33808D1D5BAEE27E2D084DAB67CED0</code></td>
|
||||
<td>Value received from server in Step 2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>g_b</td>
|
||||
<td>36, 260</td>
|
||||
<td><code>FE00010035A300F632B557BCF18A927A</code> <code>4DE8AFFCAFF852DB2AB3F43FF3D2CC1B</code> <code>902B1126BD4FA49B87DE3F92184EEC68</code> <code>EBD16345E4D4B33C2816637FA8BECABC</code> <code>99C6028300E6B9304CB0A182916F6D9C</code> <code>865619D3993367E8FF6FC4E797C57E65</code> <code>4A673C8712D4E07A9E64C1B4157C2C96</code> <code>24DF295B285BB044A45EC45CBC2A1064</code> <code>9E02B2239072393E6AC72068136B884B</code> <code>BC418E024BF8A8DD12DBB534EFFF235B</code> <code>5E78AABB524CED3E2C18C607F9832066</code> <code>AF940BA10E30A299B0AC55E1B45864FA</code> <code>54A587D7ACE194868027A98F69595725</code> <code>E1AC03095E37C04861AE41BE642BB924</code> <code>4619509FB3453CF8325BDB0077AF51AD</code> <code>276D937F8618EEA693C6A116BF05B02A</code><br> <code>E956AC65</code></td>
|
||||
<td><code>FE0001006E9707456F57D1A5BA110E87</code> <code>9B97A146952B760195EEE9B09A4416D1</code> <code>3A60C4F3DC4F267EFB3EF6009D2E08B3</code> <code>1E8097391583C3D63C9938D376D10A19</code> <code>34F2514F4C2938B7B76E3F59DA8C5B20</code> <code>FF08F1922A37808104CAE3DA3A395AF2</code> <code>EF5D4C1C9690BCE32066A1A082B88CFC</code> <code>5086F999AB7E847B4518EEFA8E6C2AB4</code> <code>E5988C93EC2EED9D264F3D297E722592</code> <code>1F87A70A7292F564E55F22C21116C312</code> <code>0ECA708B8171A690CE5E85676695669F</code> <code>581F702B8D99A42BBD927677AB6AEC82</code> <code>F714DB0C8096654171A913D91602D458</code> <code>F2E53BB2689F1D75BAECFAD5702447F6</code> <code>79C2D326A67FD5A356E236018A4DC1A8</code> <code>315F5BD35ADDCA421A0DE3BDB4B55E2B</code><br> <code>8DA578E4</code></td>
|
||||
<td>Single-byte prefix denoting length, a 256-byte (2048-bit) string, and zero bytes of padding</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@ -684,47 +684,47 @@ answer = BA0D89B5F2FFEBDA55A0626190B657ACCDF39C05C897E4838C1A4733D943AB9893641FB
|
|||
<!-- end client_DH_inner_data -->
|
||||
<p>The serialization of <em>Client_DH_Inner_Data</em> produces a string <strong>data</strong>. This is used to generate <strong>encrypted_data</strong> as specified in <a href="#7-client-computes-random-2048-bit-number-b-using-a-sufficient-amount-of-entropy-and-sends-the-server-a-message">step 6</a>, using the following inputs:</p>
|
||||
<!-- start client_DH_inner_data_input -->
|
||||
<pre><code>data = 54B64366F2FFEBDA55A0626190B657ACCDF39C05C897E4838C1A4733D943AB9893641FB40000000000000000FE00010035A300F632B557BCF18A927A4DE8AFFCAFF852DB2AB3F43FF3D2CC1B902B1126BD4FA49B87DE3F92184EEC68EBD16345E4D4B33C2816637FA8BECABC99C6028300E6B9304CB0A182916F6D9C865619D3993367E8FF6FC4E797C57E654A673C8712D4E07A9E64C1B4157C2C9624DF295B285BB044A45EC45CBC2A10649E02B2239072393E6AC72068136B884BBC418E024BF8A8DD12DBB534EFFF235B5E78AABB524CED3E2C18C607F9832066AF940BA10E30A299B0AC55E1B45864FA54A587D7ACE194868027A98F69595725E1AC03095E37C04861AE41BE642BB9244619509FB3453CF8325BDB0077AF51AD276D937F8618EEA693C6A116BF05B02AE956AC65
|
||||
padding = BA5BA18ABF32B3EFA400DCBA
|
||||
tmp_aes_key = 594061AE8790464CD895F4EC6E87183395A1D3030D30F301DC4BEA649F715D0E
|
||||
tmp_aes_iv = 4D77BC1E9C065F093B95359EA200FB0DBB6499A2A2356E2764FA3EC11183DF59</code></pre>
|
||||
<pre><code>data = 54B6436688A00CB2642E0DCCD6BD553F424330B48A33808D1D5BAEE27E2D084DAB67CED00000000000000000FE0001006E9707456F57D1A5BA110E879B97A146952B760195EEE9B09A4416D13A60C4F3DC4F267EFB3EF6009D2E08B31E8097391583C3D63C9938D376D10A1934F2514F4C2938B7B76E3F59DA8C5B20FF08F1922A37808104CAE3DA3A395AF2EF5D4C1C9690BCE32066A1A082B88CFC5086F999AB7E847B4518EEFA8E6C2AB4E5988C93EC2EED9D264F3D297E7225921F87A70A7292F564E55F22C21116C3120ECA708B8171A690CE5E85676695669F581F702B8D99A42BBD927677AB6AEC82F714DB0C8096654171A913D91602D458F2E53BB2689F1D75BAECFAD5702447F679C2D326A67FD5A356E236018A4DC1A8315F5BD35ADDCA421A0DE3BDB4B55E2B8DA578E4
|
||||
padding = F06EBED4D1D4AB175BE9CC8E
|
||||
tmp_aes_key = 010C0C9B7A484D3A0D5BE8A9D860F7037247338A949243ABFD2598EA8BAFE4D1
|
||||
tmp_aes_iv = E9737E2AA80D0D0FC0161512F6069DF0654F7B84D8A2C4679359DF78C61C4CB1</code></pre>
|
||||
<!-- end client_DH_inner_data_input -->
|
||||
<p>Process:</p>
|
||||
<pre><code>data_with_hash := SHA1(data) + data + padding (0-15 random bytes such that total length is divisible by 16)
|
||||
encrypted_data := AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv);</code></pre>
|
||||
<p>Output:</p>
|
||||
<!-- start client_DH_inner_data_output -->
|
||||
<pre><code>encrypted_data = 8DC5EDF4570B333797D9B0A39B2803B5EFDD4DECE3D7305D1A05348C7EF11BAC05FD42853527D56914DDF9D4AA5C2A42CEF5493B67ED45605BB297DB2B2F0AED96B028BA3029F7A3D39C689B271C6B42A124EA9E82B6B473B844F2DC8B40E1589E88FA1AD7CB598904E540C66B1AE111D26C74C0BA4261FBD313144F5106940A417E042B2553A55AD456154AD9F6C49D26D7CC7A853561539AD08A59B1B39D0D89671EABBE294246F1E2D038679D084DB0DFCFD26C4502B217C6EFCA8C66F8AFDE83A65241892CD2B13B4D81328E1A5182502E9E730C4847FFB797D02799FDD268B3D6226198BF87D9558172D4BCFFB4BC54464369A9309488A0C67BB8E99190C66B8E7848E742C8FD5D3491ABDC4B238BCB512E1D56B52B4EB1A8E74C664ABA560C80DF4152243BCCEFE78E51BCCBE29E7BF9867739B97891318C6CE9BAEC007B5B6708DD0C3DFD911AEA5CA552EB03</code></pre>
|
||||
<pre><code>encrypted_data = 6CA5FA6974FB55D595863B586A284FE5A15AD986F67F1C5A07491EBABBE64A244E45F46CAF47786FCCD17C3AC5CFD571BAF80F5E4986BB7BAF0AD66E82B1E6E9FA03E6D296F5F77BEB8BEB1A979B1517B5AF46E423F39E38628F06208E6CAD6D38B2C0279A84B7182300DBD2F934B243A78BB5508DDAC482868B2F8B06D8F098BA1BB156C5CB8BEE86EBE4403EAB6DDA387A55D101F1B29216C219ADEE29A637F69178C960B74CBC7D779319D0A660FA2C1855F55BD7D03E03C3E591CDD8174E2B147E15592009F1229098C58D639714D8F63A64F8E3CA699118D5C4472523F22ACE75017DC325A01B93BF983D787285AFD56D80D671677F8BAF3B4A62633FEC3EB4AB9FFC6B80358D7DF6420364BF04628C7CC4485D9A472741E6B88CE100C80B5DB173EBA4B44CD4574E7B052083021D64E8F1D142ECB6EB6255CA9739C6D3475550FF6E30A7D1E0B19A23FA2342DB</code></pre>
|
||||
<!-- end client_DH_inner_data_output -->
|
||||
<p>The length of the final string is 336 bytes.</p>
|
||||
<h6>7.2) set_client_DH_params query</h6>
|
||||
<!-- start set_client_DH_params -->
|
||||
<p>Sent payload (excluding transport headers/trailers):</p>
|
||||
<pre><code>0000 | 00 00 00 00 00 00 00 00 1C 48 07 00 DE A6 38 67
|
||||
0010 | 78 01 00 00 1F 5F 04 F5 F2 FF EB DA 55 A0 62 61
|
||||
0020 | 90 B6 57 AC CD F3 9C 05 C8 97 E4 83 8C 1A 47 33
|
||||
0030 | D9 43 AB 98 93 64 1F B4 FE 50 01 00 8D C5 ED F4
|
||||
0040 | 57 0B 33 37 97 D9 B0 A3 9B 28 03 B5 EF DD 4D EC
|
||||
0050 | E3 D7 30 5D 1A 05 34 8C 7E F1 1B AC 05 FD 42 85
|
||||
0060 | 35 27 D5 69 14 DD F9 D4 AA 5C 2A 42 CE F5 49 3B
|
||||
0070 | 67 ED 45 60 5B B2 97 DB 2B 2F 0A ED 96 B0 28 BA
|
||||
0080 | 30 29 F7 A3 D3 9C 68 9B 27 1C 6B 42 A1 24 EA 9E
|
||||
0090 | 82 B6 B4 73 B8 44 F2 DC 8B 40 E1 58 9E 88 FA 1A
|
||||
00A0 | D7 CB 59 89 04 E5 40 C6 6B 1A E1 11 D2 6C 74 C0
|
||||
00B0 | BA 42 61 FB D3 13 14 4F 51 06 94 0A 41 7E 04 2B
|
||||
00C0 | 25 53 A5 5A D4 56 15 4A D9 F6 C4 9D 26 D7 CC 7A
|
||||
00D0 | 85 35 61 53 9A D0 8A 59 B1 B3 9D 0D 89 67 1E AB
|
||||
00E0 | BE 29 42 46 F1 E2 D0 38 67 9D 08 4D B0 DF CF D2
|
||||
00F0 | 6C 45 02 B2 17 C6 EF CA 8C 66 F8 AF DE 83 A6 52
|
||||
0100 | 41 89 2C D2 B1 3B 4D 81 32 8E 1A 51 82 50 2E 9E
|
||||
0110 | 73 0C 48 47 FF B7 97 D0 27 99 FD D2 68 B3 D6 22
|
||||
0120 | 61 98 BF 87 D9 55 81 72 D4 BC FF B4 BC 54 46 43
|
||||
0130 | 69 A9 30 94 88 A0 C6 7B B8 E9 91 90 C6 6B 8E 78
|
||||
0140 | 48 E7 42 C8 FD 5D 34 91 AB DC 4B 23 8B CB 51 2E
|
||||
0150 | 1D 56 B5 2B 4E B1 A8 E7 4C 66 4A BA 56 0C 80 DF
|
||||
0160 | 41 52 24 3B CC EF E7 8E 51 BC CB E2 9E 7B F9 86
|
||||
0170 | 77 39 B9 78 91 31 8C 6C E9 BA EC 00 7B 5B 67 08
|
||||
0180 | DD 0C 3D FD 91 1A EA 5C A5 52 EB 03</code></pre>
|
||||
<pre><code>0000 | 00 00 00 00 00 00 00 00 F4 D4 09 00 09 A9 38 67
|
||||
0010 | 78 01 00 00 1F 5F 04 F5 88 A0 0C B2 64 2E 0D CC
|
||||
0020 | D6 BD 55 3F 42 43 30 B4 8A 33 80 8D 1D 5B AE E2
|
||||
0030 | 7E 2D 08 4D AB 67 CE D0 FE 50 01 00 6C A5 FA 69
|
||||
0040 | 74 FB 55 D5 95 86 3B 58 6A 28 4F E5 A1 5A D9 86
|
||||
0050 | F6 7F 1C 5A 07 49 1E BA BB E6 4A 24 4E 45 F4 6C
|
||||
0060 | AF 47 78 6F CC D1 7C 3A C5 CF D5 71 BA F8 0F 5E
|
||||
0070 | 49 86 BB 7B AF 0A D6 6E 82 B1 E6 E9 FA 03 E6 D2
|
||||
0080 | 96 F5 F7 7B EB 8B EB 1A 97 9B 15 17 B5 AF 46 E4
|
||||
0090 | 23 F3 9E 38 62 8F 06 20 8E 6C AD 6D 38 B2 C0 27
|
||||
00A0 | 9A 84 B7 18 23 00 DB D2 F9 34 B2 43 A7 8B B5 50
|
||||
00B0 | 8D DA C4 82 86 8B 2F 8B 06 D8 F0 98 BA 1B B1 56
|
||||
00C0 | C5 CB 8B EE 86 EB E4 40 3E AB 6D DA 38 7A 55 D1
|
||||
00D0 | 01 F1 B2 92 16 C2 19 AD EE 29 A6 37 F6 91 78 C9
|
||||
00E0 | 60 B7 4C BC 7D 77 93 19 D0 A6 60 FA 2C 18 55 F5
|
||||
00F0 | 5B D7 D0 3E 03 C3 E5 91 CD D8 17 4E 2B 14 7E 15
|
||||
0100 | 59 20 09 F1 22 90 98 C5 8D 63 97 14 D8 F6 3A 64
|
||||
0110 | F8 E3 CA 69 91 18 D5 C4 47 25 23 F2 2A CE 75 01
|
||||
0120 | 7D C3 25 A0 1B 93 BF 98 3D 78 72 85 AF D5 6D 80
|
||||
0130 | D6 71 67 7F 8B AF 3B 4A 62 63 3F EC 3E B4 AB 9F
|
||||
0140 | FC 6B 80 35 8D 7D F6 42 03 64 BF 04 62 8C 7C C4
|
||||
0150 | 48 5D 9A 47 27 41 E6 B8 8C E1 00 C8 0B 5D B1 73
|
||||
0160 | EB A4 B4 4C D4 57 4E 7B 05 20 83 02 1D 64 E8 F1
|
||||
0170 | D1 42 EC B6 EB 62 55 CA 97 39 C6 D3 47 55 50 FF
|
||||
0180 | 6E 30 A7 D1 E0 B1 9A 23 FA 23 42 DB</code></pre>
|
||||
<p>Payload (de)serialization:</p>
|
||||
<pre><code>set_client_DH_params#f5045f1f nonce:int128 server_nonce:int128 encrypted_data:string = Set_client_DH_params_answer;</code></pre>
|
||||
<table class="table">
|
||||
|
@ -746,7 +746,7 @@ encrypted_data := AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv);<
|
|||
<tr>
|
||||
<td>message_id</td>
|
||||
<td>8, 8</td>
|
||||
<td><code>1C480700DEA63867</code></td>
|
||||
<td><code>F4D4090009A93867</code></td>
|
||||
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() << 32) + (N*4)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@ -764,19 +764,19 @@ encrypted_data := AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv);<
|
|||
<tr>
|
||||
<td>nonce</td>
|
||||
<td>24, 16</td>
|
||||
<td><code>F2FFEBDA55A0626190B657ACCDF39C05</code></td>
|
||||
<td><code>88A00CB2642E0DCCD6BD553F424330B4</code></td>
|
||||
<td>Value generated by client in Step 1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>server_nonce</td>
|
||||
<td>40, 16</td>
|
||||
<td><code>C897E4838C1A4733D943AB9893641FB4</code></td>
|
||||
<td><code>8A33808D1D5BAEE27E2D084DAB67CED0</code></td>
|
||||
<td>Value received from server in Step 2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>encrypted_data</td>
|
||||
<td>56, 340</td>
|
||||
<td><code>FE5001008DC5EDF4570B333797D9B0A3</code> <code>9B2803B5EFDD4DECE3D7305D1A05348C</code> <code>7EF11BAC05FD42853527D56914DDF9D4</code> <code>AA5C2A42CEF5493B67ED45605BB297DB</code> <code>2B2F0AED96B028BA3029F7A3D39C689B</code> <code>271C6B42A124EA9E82B6B473B844F2DC</code> <code>8B40E1589E88FA1AD7CB598904E540C6</code> <code>6B1AE111D26C74C0BA4261FBD313144F</code> <code>5106940A417E042B2553A55AD456154A</code> <code>D9F6C49D26D7CC7A853561539AD08A59</code> <code>B1B39D0D89671EABBE294246F1E2D038</code> <code>679D084DB0DFCFD26C4502B217C6EFCA</code> <code>8C66F8AFDE83A65241892CD2B13B4D81</code> <code>328E1A5182502E9E730C4847FFB797D0</code> <code>2799FDD268B3D6226198BF87D9558172</code> <code>D4BCFFB4BC54464369A9309488A0C67B</code> <code>B8E99190C66B8E7848E742C8FD5D3491</code> <code>ABDC4B238BCB512E1D56B52B4EB1A8E7</code> <code>4C664ABA560C80DF4152243BCCEFE78E</code> <code>51BCCBE29E7BF9867739B97891318C6C</code> <code>E9BAEC007B5B6708DD0C3DFD911AEA5C</code><br> <code>A552EB03</code></td>
|
||||
<td><code>FE5001006CA5FA6974FB55D595863B58</code> <code>6A284FE5A15AD986F67F1C5A07491EBA</code> <code>BBE64A244E45F46CAF47786FCCD17C3A</code> <code>C5CFD571BAF80F5E4986BB7BAF0AD66E</code> <code>82B1E6E9FA03E6D296F5F77BEB8BEB1A</code> <code>979B1517B5AF46E423F39E38628F0620</code> <code>8E6CAD6D38B2C0279A84B7182300DBD2</code> <code>F934B243A78BB5508DDAC482868B2F8B</code> <code>06D8F098BA1BB156C5CB8BEE86EBE440</code> <code>3EAB6DDA387A55D101F1B29216C219AD</code> <code>EE29A637F69178C960B74CBC7D779319</code> <code>D0A660FA2C1855F55BD7D03E03C3E591</code> <code>CDD8174E2B147E15592009F1229098C5</code> <code>8D639714D8F63A64F8E3CA699118D5C4</code> <code>472523F22ACE75017DC325A01B93BF98</code> <code>3D787285AFD56D80D671677F8BAF3B4A</code> <code>62633FEC3EB4AB9FFC6B80358D7DF642</code> <code>0364BF04628C7CC4485D9A472741E6B8</code> <code>8CE100C80B5DB173EBA4B44CD4574E7B</code> <code>052083021D64E8F1D142ECB6EB6255CA</code> <code>9739C6D3475550FF6E30A7D1E0B19A23</code><br> <code>FA2342DB</code></td>
|
||||
<td>Encrypted client_DH_inner_data generated previously, serialized as a TL byte string</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
@ -785,17 +785,17 @@ encrypted_data := AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv);<
|
|||
<h5><a class="anchor" href="#8-auth-key-generation" id="8-auth-key-generation" name="8-auth-key-generation"><i class="anchor-icon"></i></a>8) Auth key generation</h5>
|
||||
<p>The client computes the auth_key using formula <code>g_a^b mod dh_prime</code>:</p>
|
||||
<!-- start auth_key -->
|
||||
<pre><code>auth_key = 86E1807DB45ED838284D01E5DF7DE333F35B5B65F70D86204C06FC16442F50CBCFB749AFD9FED3234BBA4C997BEC0AA5761F08125569623021B67DE2811E9892A7D928C517BC678A3169CF3FBCD082A2AD5BA0B3AD667C7290F9361FF85D8C3EB1F404E54540154A56CCBAFBFFDDAD2E700C0B5E92A5274EFA27B825882EB21CEE9CF380CFD7BFD881EC7F20BD65F5022F77A84F0604A70FC3518A4A61E1EE9FFDE9677685C903428128251FAA7A99ADDC490ECE12B4C03055B8DE35B9F5E62F0A64923E3AD8CC7FC5F9B79098D35C5DE38A13C4D69A2BD8DE2EBB0854F533B7164C876DA5C4E804D9F8DCDD9CCC678E7C0F20B9DE86C012CA55A84A3955AFB6</code></pre>
|
||||
<pre><code>auth_key = BCEC8676D1BF9942E58451FB59B077B4E1CED8BEA189910E9C4759551612EE1EF1C33ED8DC685B5D2ADD46F4C04DD62A8884F0DA77FE8FA1FD973063F7535AA22D5BF85FAD0D6B856911272DAAE6E8ADA29E2679D2879696AA711F95A225C896DE07F72BF1342ED04F528943537F68C4E12AAEFC79A05BC1ACFB7DE4CCC9B694977D98ED4BDD7971B2CCED07B4F760366A5FAE69121DEB9A79A127B30A965E438831F731EEB0616EC5EB40158F669878E28F54482D859E458B8A3C0DEEA3B817A4236AE729A6A147379F7E98737D00E17BEC1DFF0896F9C11D18394F64F2548E877F7623D7845587FEA12F02FFE2479DBCCB688C2248E036CD0D74C82B956A25</code></pre>
|
||||
<!-- end auth_key -->
|
||||
<h5><a class="anchor" href="#9-final-server-reply" id="9-final-server-reply" name="9-final-server-reply"><i class="anchor-icon"></i></a>9) Final server reply</h5>
|
||||
<p>The server verifies and confirms that auth_key_hash is unique: since it's unique, it replies with the following:</p>
|
||||
<!-- start dh_gen_ok -->
|
||||
<p>Received payload (excluding transport headers/trailers):</p>
|
||||
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 E0 1A CE DE A6 38 67
|
||||
0010 | 34 00 00 00 34 F7 CB 3B F2 FF EB DA 55 A0 62 61
|
||||
0020 | 90 B6 57 AC CD F3 9C 05 C8 97 E4 83 8C 1A 47 33
|
||||
0030 | D9 43 AB 98 93 64 1F B4 14 D2 0C 61 FB F8 BC D0
|
||||
0040 | DF E5 90 21 13 41 D6 1D</code></pre>
|
||||
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 6C 44 58 0B A9 38 67
|
||||
0010 | 34 00 00 00 34 F7 CB 3B 88 A0 0C B2 64 2E 0D CC
|
||||
0020 | D6 BD 55 3F 42 43 30 B4 8A 33 80 8D 1D 5B AE E2
|
||||
0030 | 7E 2D 08 4D AB 67 CE D0 EC 44 2B 71 0B 93 7F 95
|
||||
0040 | 1F 3F 2D 57 D0 B3 38 2E</code></pre>
|
||||
<p>Payload (de)serialization:</p>
|
||||
<pre><code>dh_gen_ok#3bcbf734 nonce:int128 server_nonce:int128 new_nonce_hash1:int128 = Set_client_DH_params_answer;</code></pre>
|
||||
<table class="table">
|
||||
|
@ -817,7 +817,7 @@ encrypted_data := AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv);<
|
|||
<tr>
|
||||
<td>message_id</td>
|
||||
<td>8, 8</td>
|
||||
<td><code>01E01ACEDEA63867</code></td>
|
||||
<td><code>016C44580BA93867</code></td>
|
||||
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() << 32) + (N*4)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@ -835,19 +835,19 @@ encrypted_data := AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv);<
|
|||
<tr>
|
||||
<td>nonce</td>
|
||||
<td>24, 16</td>
|
||||
<td><code>F2FFEBDA55A0626190B657ACCDF39C05</code></td>
|
||||
<td><code>88A00CB2642E0DCCD6BD553F424330B4</code></td>
|
||||
<td>Value generated by client in Step 1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>server_nonce</td>
|
||||
<td>40, 16</td>
|
||||
<td><code>C897E4838C1A4733D943AB9893641FB4</code></td>
|
||||
<td><code>8A33808D1D5BAEE27E2D084DAB67CED0</code></td>
|
||||
<td>Value received from server in Step 2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>new_nonce_hash1</td>
|
||||
<td>56, 16</td>
|
||||
<td><code>14D20C61FBF8BCD0DFE590211341D61D</code></td>
|
||||
<td><code>EC442B710B937F951F3F2D57D0B3382E</code></td>
|
||||
<td>The 128 lower-order bits of SHA1 of the byte string derived from the <code>new_nonce</code> string by adding a single byte with the value of 1, 2, or 3, and followed by another 8 bytes with <code>auth_key_aux_hash</code>. Different values are required to prevent an intruder from changing server response dh_gen_ok into dh_gen_retry.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
|
Loading…
Reference in a new issue