Update content of files

This commit is contained in:
GitHub Action 2023-12-01 22:08:11 +00:00
parent 28cb78ad54
commit a871e49040
15 changed files with 261 additions and 322 deletions

View file

@ -63,10 +63,6 @@
<a href='/method/stories.sendStory'>stories.sendStory</a>#bcb73644 flags:<a href='/type/%23'>#</a> pinned:flags.2?<a href='/constructor/true'>true</a> noforwards:flags.4?<a href='/constructor/true'>true</a> peer:<a href='/type/InputPeer'>InputPeer</a> media:<a href='/type/InputMedia'>InputMedia</a> media_areas:flags.5?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/MediaArea'>MediaArea</a>&gt; caption:flags.0?<a href='/type/string'>string</a> entities:flags.1?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/MessageEntity'>MessageEntity</a>&gt; privacy_rules:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/InputPrivacyRule'>InputPrivacyRule</a>&gt; random_id:<a href='/type/long'>long</a> period:flags.3?<a href='/type/int'>int</a> = <a href='/type/Updates'>Updates</a>;
<a href='/method/stories.editStory'>stories.editStory</a>#b583ba46 flags:<a href='/type/%23'>#</a> peer:<a href='/type/InputPeer'>InputPeer</a> id:<a href='/type/int'>int</a> media:flags.0?<a href='/type/InputMedia'>InputMedia</a> media_areas:flags.3?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/MediaArea'>MediaArea</a>&gt; caption:flags.1?<a href='/type/string'>string</a> entities:flags.1?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/MessageEntity'>MessageEntity</a>&gt; privacy_rules:flags.2?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/InputPrivacyRule'>InputPrivacyRule</a>&gt; = <a href='/type/Updates'>Updates</a>;
<a href='/method/contacts.getBlocked'>contacts.getBlocked</a>#9a868f80 flags:<a href='/type/%23'>#</a> my_stories_from:flags.0?<a href='/constructor/true'>true</a> offset:<a href='/type/int'>int</a> limit:<a href='/type/int'>int</a> = <a href='/type/contacts.Blocked'>contacts.Blocked</a>;
<a href='/method/contacts.block'>contacts.block</a>#2e2e8734 flags:<a href='/type/%23'>#</a> my_stories_from:flags.0?<a href='/constructor/true'>true</a> id:<a href='/type/InputPeer'>InputPeer</a> = <a href='/type/Bool'>Bool</a>;
<a href='/method/contacts.unblock'>contacts.unblock</a>#b550d328 flags:<a href='/type/%23'>#</a> my_stories_from:flags.0?<a href='/constructor/true'>true</a> id:<a href='/type/InputPeer'>InputPeer</a> = <a href='/type/Bool'>Bool</a>;
<a href='/method/stories.getChatsToSend'>stories.getChatsToSend</a>#a56a8b60 = <a href='/type/messages.Chats'>messages.Chats</a>;</code></pre>
<p>Before posting a story, clients should invoke <a href="/method/stories.canSendStory">stories.canSendStory</a>, to make sure they can send stories to the specified <code>peer</code> (which can be <a href="/constructor/inputPeerSelf">inputPeerSelf</a> to send the story as a normal user and <a href="/constructor/inputPeerChannel">inputPeerChannel</a> to send a story as a channel). </p>
<p>Use <a href="/method/stories.getChatsToSend">stories.getChatsToSend</a> to obtain a list of channels where the user can post stories; <a href="/method/stories.canSendStory">stories.canSendStory</a> must still be used before uploading a story to make sure no other limit was reached, as described in the <a href="/api/stories#posting-stories">main documentation »</a>.

View file

@ -179,12 +179,12 @@
<tr>
<td><strong>stories_hidden</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags2</a>.1?<a href="/constructor/true">true</a></td>
<td> </td>
<td>Whether we have <a href="/api/stories#hiding-stories-of-other-users">hidden all stories posted by this channel »</a>.</td>
</tr>
<tr>
<td><strong>stories_hidden_min</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags2</a>.2?<a href="/constructor/true">true</a></td>
<td> </td>
<td>If set, indicates that the <code>stories_hidden</code> flag was not populated, and its value must cannot be relied on; use the previously cached value, or re-fetch the constructor using <a href="/method/channels.getChannels">channels.getChannels</a> to obtain the latest value of the <code>stories_hidden</code> flag.</td>
</tr>
<tr>
<td><strong>stories_unavailable</strong></td>
@ -254,7 +254,7 @@
<tr>
<td><strong>stories_max_id</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags2</a>.4?<a href="/type/int">int</a></td>
<td> </td>
<td>ID of the maximum read <a href="/api/stories">story</a>.</td>
</tr>
</tbody>
</table>
@ -275,6 +275,10 @@
<p>Set whether all users should <a href="/api/invites#join-requests">request admin approval to join the group »</a>.</p>
<h4><a class="anchor" href="#forums" id="forums" name="forums"><i class="anchor-icon"></i></a><a href="/api/forum">Forums</a></h4>
<p>Telegram allows creating forums with multiple distinct topics.</p>
<h4><a class="anchor" href="#stories" id="stories" name="stories"><i class="anchor-icon"></i></a><a href="/api/stories">Stories</a></h4>
<p>Telegram users and channels can easily post and view stories through the API.</p>
<h4><a class="anchor" href="#channelsgetchannels" id="channelsgetchannels" name="channelsgetchannels"><i class="anchor-icon"></i></a><a href="/method/channels.getChannels">channels.getChannels</a></h4>
<p>Get info about <a href="/api/channel">channels/supergroups</a></p>
<h4><a class="anchor" href="#admin-banned-default-rights" id="admin-banned-default-rights" name="admin-banned-default-rights"><i class="anchor-icon"></i></a><a href="/api/rights">Admin, banned, default rights</a></h4>
<p>How to handle admin permissions, granular bans and global permissions in channels, groups and supergroups.</p></div>

View file

@ -139,7 +139,7 @@
<tr>
<td><strong>stories_pinned_available</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags2</a>.5?<a href="/constructor/true">true</a></td>
<td> </td>
<td>Whether this user has some <a href="/api/stories#pinned-or-archived-stories">pinned stories</a>.</td>
</tr>
<tr>
<td><strong>view_forum_as_messages</strong></td>
@ -341,6 +341,8 @@
<p>Admins of supergroups with a certain number of members can choose to unleash the full proactive power of Telegram's own antispam algorithms turning on the new Aggressive mode for the automated spam filters.</p>
<h4><a class="anchor" href="#translation" id="translation" name="translation"><i class="anchor-icon"></i></a><a href="/api/translation">Translation</a></h4>
<p>Telegram allows translating chat messages: Telegram Premium users may even enable real-time chat translation.</p>
<h4><a class="anchor" href="#stories" id="stories" name="stories"><i class="anchor-icon"></i></a><a href="/api/stories">Stories</a></h4>
<p>Telegram users and channels can easily post and view stories through the API.</p>
<h4><a class="anchor" href="#admin-banned-default-rights" id="admin-banned-default-rights" name="admin-banned-default-rights"><i class="anchor-icon"></i></a><a href="/api/rights">Admin, banned, default rights</a></h4>
<p>How to handle admin permissions, granular bans and global permissions in channels, groups and supergroups.</p>
<h4><a class="anchor" href="#channels-supergroups-gigagroups-and-basic-groups" id="channels-supergroups-gigagroups-and-basic-groups" name="channels-supergroups-gigagroups-and-basic-groups"><i class="anchor-icon"></i></a><a href="/api/channel">Channels, supergroups, gigagroups and basic groups</a></h4>
@ -358,9 +360,7 @@
<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="#message-reactions" id="message-reactions" name="message-reactions"><i class="anchor-icon"></i></a><a href="/api/reactions">Message reactions</a></h4>
<p>Telegram allows users to react on any message using specific emojis, triggering cute lottie animations.</p>
<h4><a class="anchor" href="#stories" id="stories" name="stories"><i class="anchor-icon"></i></a><a href="/api/stories">Stories</a></h4>
<p>Telegram users and channels can easily post and view stories through the API.</p></div>
<p>Telegram allows users to react on any message using specific emojis, triggering cute lottie animations.</p></div>
</div>

View file

@ -80,7 +80,7 @@
<tr>
<td><strong>from_request</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>We have allowed the bot to send us messages using <a href="/method/bots.allowSendMessage">bots.allowSendMessage »</a>.</td>
</tr>
<tr>
<td><strong>domain</strong></td>
@ -99,6 +99,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="#bot-attachment-menu-and-side-menu-entries" id="bot-attachment-menu-and-side-menu-entries" name="bot-attachment-menu-and-side-menu-entries"><i class="anchor-icon"></i></a><a href="/api/bots/attach">Bot attachment menu and side menu entries</a></h4>
<p>Bots can install attachment menu and side menu entries, offering conveniently accessible, versatile web apps.</p>
<h4><a class="anchor" href="#botsallowsendmessage" id="botsallowsendmessage" name="botsallowsendmessage"><i class="anchor-icon"></i></a><a href="/method/bots.allowSendMessage">bots.allowSendMessage</a></h4>
<p>Allow the specified bot to send us messages</p>
<h4><a class="anchor" href="#telegram-login-widget" id="telegram-login-widget" name="telegram-login-widget"><i class="anchor-icon"></i></a><a href="/widgets/login">Telegram Login Widget</a></h4>
<h4><a class="anchor" href="#mini-apps-on-telegram" id="mini-apps-on-telegram" name="mini-apps-on-telegram"><i class="anchor-icon"></i></a><a href="/api/bots/webapps">Mini Apps on Telegram</a></h4>
<p>Bots can offer users interactive HTML5 web apps to completely replace any website.</p></div>

View file

@ -79,7 +79,7 @@
<tr>
<td><strong>reactions_count</strong></td>
<td style="text-align: center;"><a href="/type/int">int</a></td>
<td> </td>
<td>Number of reactions that were added to the story</td>
</tr>
<tr>
<td><strong>views</strong></td>

View file

@ -79,17 +79,17 @@
<tr>
<td><strong>public</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.7?<a href="/constructor/true">true</a></td>
<td>Whether this story is public</td>
<td>Whether this story is public and can be viewed by everyone</td>
</tr>
<tr>
<td><strong>close_friends</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.8?<a href="/constructor/true">true</a></td>
<td> </td>
<td>Whether this story can only be viewed by <a href="/api/privacy">our close friends, see here »</a> for more info</td>
</tr>
<tr>
<td><strong>min</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.9?<a href="/constructor/true">true</a></td>
<td> </td>
<td>Full information about this story was omitted for space and performance reasons; use <a href="/method/stories.getStoriesByID">stories.getStoriesByID</a> to fetch full info about this story when and if needed.</td>
</tr>
<tr>
<td><strong>noforwards</strong></td>
@ -104,12 +104,12 @@
<tr>
<td><strong>contacts</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.12?<a href="/constructor/true">true</a></td>
<td> </td>
<td>Whether this story can only be viewed by our contacts</td>
</tr>
<tr>
<td><strong>selected_contacts</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.13?<a href="/constructor/true">true</a></td>
<td> </td>
<td>Whether this story can only be viewed by a select list of our contacts</td>
</tr>
<tr>
<td><strong>out</strong></td>
@ -171,12 +171,14 @@
<h3><a class="anchor" href="#type" id="type" name="type"><i class="anchor-icon"></i></a>Type</h3>
<p><a href="/type/StoryItem">StoryItem</a></p>
<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="#privacy" id="privacy" name="privacy"><i class="anchor-icon"></i></a><a href="/api/privacy">Privacy</a></h4>
<p>Telegram allows users to specify granular privacy settings, choosing which users can or can't interact with them in certain ways.</p>
<h4><a class="anchor" href="#storiesgetstoriesbyid" id="storiesgetstoriesbyid" name="storiesgetstoriesbyid"><i class="anchor-icon"></i></a><a href="/method/stories.getStoriesByID">stories.getStoriesByID</a></h4>
<p>Obtain full info about a set of <a href="/api/stories">stories</a> by their IDs.</p>
<h4><a class="anchor" href="#styled-text-with-message-entities" id="styled-text-with-message-entities" name="styled-text-with-message-entities"><i class="anchor-icon"></i></a><a href="/api/entities">Styled text with message entities</a></h4>
<p>How to create styled text with message entities</p>
<h4><a class="anchor" href="#stories" id="stories" name="stories"><i class="anchor-icon"></i></a><a href="/api/stories">Stories</a></h4>
<p>Telegram users and channels can easily post and view stories through the API.</p>
<h4><a class="anchor" href="#privacy" id="privacy" name="privacy"><i class="anchor-icon"></i></a><a href="/api/privacy">Privacy</a></h4>
<p>Telegram allows users to specify granular privacy settings, choosing which users can or can't interact with them in certain ways.</p></div>
<p>Telegram users and channels can easily post and view stories through the API.</p></div>
</div>

View file

@ -74,7 +74,7 @@
<tr>
<td><strong>close_friends</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.8?<a href="/constructor/true">true</a></td>
<td> </td>
<td>Whether this story can only be viewed by <a href="/api/privacy">our close friends, see here »</a> for more info</td>
</tr>
<tr>
<td><strong>id</strong></td>
@ -96,6 +96,8 @@
<h3><a class="anchor" href="#type" id="type" name="type"><i class="anchor-icon"></i></a>Type</h3>
<p><a href="/type/StoryItem">StoryItem</a></p>
<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="#privacy" id="privacy" name="privacy"><i class="anchor-icon"></i></a><a href="/api/privacy">Privacy</a></h4>
<p>Telegram allows users to specify granular privacy settings, choosing which users can or can't interact with them in certain ways.</p>
<h4><a class="anchor" href="#storiesgetstoriesbyid" id="storiesgetstoriesbyid" name="storiesgetstoriesbyid"><i class="anchor-icon"></i></a><a href="/method/stories.getStoriesByID">stories.getStoriesByID</a></h4>
<p>Obtain full info about a set of <a href="/api/stories">stories</a> by their IDs.</p></div>

View file

@ -74,12 +74,12 @@
<tr>
<td><strong>blocked</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>Whether we have <a href="/api/block">completely blocked</a> this user, including from viewing more of our stories.</td>
</tr>
<tr>
<td><strong>blocked_my_stories_from</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>Whether we have <a href="/api/block">blocked</a> this user from viewing more of our stories.</td>
</tr>
<tr>
<td><strong>user_id</strong></td>
@ -101,6 +101,8 @@
<h3><a class="anchor" href="#type" id="type" name="type"><i class="anchor-icon"></i></a>Type</h3>
<p><a href="/type/StoryView">StoryView</a></p>
<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="#blocklist" id="blocklist" name="blocklist"><i class="anchor-icon"></i></a><a href="/api/block">Blocklist</a></h4>
<p>Working with the blocklist.</p>
<h4><a class="anchor" href="#stories" id="stories" name="stories"><i class="anchor-icon"></i></a><a href="/api/stories">Stories</a></h4>
<p>Telegram users and channels can easily post and view stories through the API.</p></div>

View file

@ -94,7 +94,7 @@
<tr>
<td><strong>reactions_count</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.4?<a href="/type/int">int</a></td>
<td> </td>
<td>Number of reactions added to the story</td>
</tr>
<tr>
<td><strong>recent_viewers</strong></td>

View file

@ -174,7 +174,7 @@
<tr>
<td><strong>close_friend</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags2</a>.2?<a href="/constructor/true">true</a></td>
<td> </td>
<td>Whether we marked this user as a <a href="/api/privacy">close friend, see here » for more info</a></td>
</tr>
<tr>
<td><strong>stories_hidden</strong></td>
@ -259,7 +259,7 @@
<tr>
<td><strong>stories_max_id</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags2</a>.5?<a href="/type/int">int</a></td>
<td> </td>
<td>ID of the maximum read <a href="/api/stories">story</a>.</td>
</tr>
</tbody>
</table>
@ -270,6 +270,8 @@
<p>In some situations user and channel constructors have reduced set of fields present (although id is always there) and min flag set.</p>
<h4><a class="anchor" href="#bot-attachment-menu-and-side-menu-entries" id="bot-attachment-menu-and-side-menu-entries" name="bot-attachment-menu-and-side-menu-entries"><i class="anchor-icon"></i></a><a href="/api/bots/attach">Bot attachment menu and side menu entries</a></h4>
<p>Bots can install attachment menu and side menu entries, offering conveniently accessible, versatile web apps.</p>
<h4><a class="anchor" href="#privacy" id="privacy" name="privacy"><i class="anchor-icon"></i></a><a href="/api/privacy">Privacy</a></h4>
<p>Telegram allows users to specify granular privacy settings, choosing which users can or can't interact with them in certain ways.</p>
<h4><a class="anchor" href="#stories" id="stories" name="stories"><i class="anchor-icon"></i></a><a href="/api/stories">Stories</a></h4>
<p>Telegram users and channels can easily post and view stories through the API.</p>
<h4><a class="anchor" href="#userfull" id="userfull" name="userfull"><i class="anchor-icon"></i></a><a href="/constructor/userFull">userFull</a></h4>

View file

@ -114,12 +114,12 @@
<tr>
<td><strong>stories_pinned_available</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.26?<a href="/constructor/true">true</a></td>
<td> </td>
<td>Whether this user has some <a href="/api/stories#pinned-or-archived-stories">pinned stories</a>.</td>
</tr>
<tr>
<td><strong>blocked_my_stories_from</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.27?<a href="/constructor/true">true</a></td>
<td> </td>
<td>Whether we've <a href="/api/block">blocked this user, preventing them from seeing our stories »</a>.</td>
</tr>
<tr>
<td><strong>id</strong></td>
@ -214,7 +214,7 @@
<tr>
<td><strong>stories</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.25?<a href="/type/PeerStories">PeerStories</a></td>
<td> </td>
<td>Active <a href="/api/stories">stories »</a></td>
</tr>
</tbody>
</table>
@ -225,6 +225,10 @@
<p>Telegram allows scheduling messages</p>
<h4><a class="anchor" href="#translation" id="translation" name="translation"><i class="anchor-icon"></i></a><a href="/api/translation">Translation</a></h4>
<p>Telegram allows translating chat messages: Telegram Premium users may even enable real-time chat translation.</p>
<h4><a class="anchor" href="#stories" id="stories" name="stories"><i class="anchor-icon"></i></a><a href="/api/stories">Stories</a></h4>
<p>Telegram users and channels can easily post and view stories through the API.</p>
<h4><a class="anchor" href="#blocklist" id="blocklist" name="blocklist"><i class="anchor-icon"></i></a><a href="/api/block">Blocklist</a></h4>
<p>Working with the blocklist.</p>
<h4><a class="anchor" href="#pinned-messages" id="pinned-messages" name="pinned-messages"><i class="anchor-icon"></i></a><a href="/api/pin">Pinned messages</a></h4>
<p>Telegram allows pinning multiple messages on top of a specific chat.</p>
<h4><a class="anchor" href="#folders" id="folders" name="folders"><i class="anchor-icon"></i></a><a href="/api/folders">Folders</a></h4>

View file

@ -13,12 +13,10 @@ flags
Flags, see TL conditional fields
peer
Peer
 
Peer that posted the story
id
int
 
story
flags.0?StoryItem…">
Story…">
<meta property="og:title" content="webPageAttributeStory">
<meta property="og:image" content="">
<meta property="og:description" content="Parameters
@ -30,12 +28,10 @@ flags
Flags, see TL conditional fields
peer
Peer
 
Peer that posted the story
id
int
 
story
flags.0?StoryItem…">
Story…">
<link rel="icon" type="image/svg+xml" href="/img/website_icon.svg?4">
<link rel="apple-touch-icon" sizes="180x180" href="/img/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/img/favicon-32x32.png">
@ -101,12 +97,12 @@ flags.0?StoryItem…">
<tr>
<td><strong>peer</strong></td>
<td style="text-align: center;"><a href="/type/Peer">Peer</a></td>
<td> </td>
<td>Peer that posted the story</td>
</tr>
<tr>
<td><strong>id</strong></td>
<td style="text-align: center;"><a href="/type/int">int</a></td>
<td> </td>
<td><a href="/api/stories#watching-stories">Story ID</a></td>
</tr>
<tr>
<td><strong>story</strong></td>
@ -116,7 +112,10 @@ flags.0?StoryItem…">
</tbody>
</table>
<h3><a class="anchor" href="#type" id="type" name="type"><i class="anchor-icon"></i></a>Type</h3>
<p><a href="/type/WebPageAttribute">WebPageAttribute</a></p></div>
<p><a href="/type/WebPageAttribute">WebPageAttribute</a></p>
<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="#stories" id="stories" name="stories"><i class="anchor-icon"></i></a><a href="/api/stories">Stories</a></h4>
<p>Telegram users and channels can easily post and view stories through the API.</p></div>
</div>

View file

@ -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 04 95 08 00 92 48 6A 65
0010 | 14 00 00 00 F1 8E 7E BE E2 A2 03 78 80 7D D3 38
0020 | 7B 46 CE C6 CC 91 8F 48</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 6C 28 05 00 77 57 6A 65
0010 | 14 00 00 00 F1 8E 7E BE 32 E0 57 DC 82 0E 13 67
0020 | DA C9 FD EF B0 0D FA E3</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>0495080092486A65</code></td>
<td><code>6C28050077576A65</code></td>
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() &lt;&lt; 32) + (N*4)</td>
</tr>
<tr>
@ -95,7 +95,7 @@
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>E2A20378807DD3387B46CEC6CC918F48</code></td>
<td><code>32E057DC820E1367DAC9FDEFB00DFAE3</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 7C E8 51 92 48 6A 65
0010 | 88 00 00 00 63 24 16 05 E2 A2 03 78 80 7D D3 38
0020 | 7B 46 CE C6 CC 91 8F 48 92 54 F3 93 E5 FB 43 86
0030 | 98 FA 57 A7 44 1D 98 38 08 19 98 68 30 5A F3 05
0040 | 9D 00 00 00 15 C4 B5 1C 03 00 00 00 A5 B7 F7 09
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 DC 7A C5 77 57 6A 65
0010 | 84 00 00 00 63 24 16 05 32 E0 57 DC 82 0E 13 67
0020 | DA C9 FD EF B0 0D FA E3 87 69 98 EC 69 F2 D2 8B
0030 | 69 12 57 F3 D9 52 84 D8 08 2D 0D F2 8C 1F 09 F9
0040 | 55 00 00 00 15 C4 B5 1C 03 00 00 00 A5 B7 F7 09
0050 | 35 5F C3 0B 21 6B E8 6C 02 2B B4 C3 85 FD 64 DE
0060 | 85 1D 9D D0</code></pre>
<p>Payload (de)serialization:</p>
@ -132,13 +132,13 @@
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>017CE85192486A65</code></td>
<td><code>01DC7AC577576A65</code></td>
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() &lt;&lt; 32) + (N*4)</td>
</tr>
<tr>
<td>message_length</td>
<td>16, 4</td>
<td><code>88000000</code> (136 in decimal)</td>
<td><code>84000000</code> (132 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -150,19 +150,19 @@
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>E2A20378807DD3387B46CEC6CC918F48</code></td>
<td><code>32E057DC820E1367DAC9FDEFB00DFAE3</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>9254F393E5FB438698FA57A7441D9838</code></td>
<td><code>876998EC69F2D28B691257F3D95284D8</code></td>
<td>Server-generated random number</td>
</tr>
<tr>
<td>pq</td>
<td>56, 12</td>
<td><code>08199868305AF3059D000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1844338604301813149</td>
<td><code>082D0DF28C1F09F955000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 3246517590034086229</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 &lt; q.</h5>
<!-- start pq -->
<pre><code>pq = 1844338604301813149</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>1844338604301813149 = 1244688997 * 1481766617</code></p>
<pre><code>p = 1244688997
q = 1481766617</code></pre>
<pre><code>pq = 3246517590034086229</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>3246517590034086229 = 1693217573 * 1917365873</code></p>
<pre><code>p = 1693217573
q = 1917365873</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 19 98 68 30 5A F3 05 9D 00 00 00
0010 | 04 4A 30 72 65 00 00 00 04 58 51 F6 D9 00 00 00
0020 | E2 A2 03 78 80 7D D3 38 7B 46 CE C6 CC 91 8F 48
0030 | 92 54 F3 93 E5 FB 43 86 98 FA 57 A7 44 1D 98 38
0040 | 84 80 1F 4C 0A E1 2B A4 10 94 7A 69 D0 B2 8B 44
0050 | 02 9D 23 01 CA 74 1B 38 14 11 17 36 6E 28 94 E6
<pre><code>0000 | 95 5F F5 A9 08 2D 0D F2 8C 1F 09 F9 55 00 00 00
0010 | 04 64 EC 73 25 00 00 00 04 72 48 AE 71 00 00 00
0020 | 32 E0 57 DC 82 0E 13 67 DA C9 FD EF B0 0D FA E3
0030 | 87 69 98 EC 69 F2 D2 8B 69 12 57 F3 D9 52 84 D8
0040 | 60 53 53 97 02 E3 B3 45 95 1B 83 0A 11 ED B8 30
0050 | 56 0D 5A 46 F8 15 0F 31 EF 75 92 CA A5 86 F1 F8
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 = 1481766617</code></pre>
<tr>
<td>pq</td>
<td>4, 12</td>
<td><code>08199868305AF3059D000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1844338604301813149</td>
<td><code>082D0DF28C1F09F955000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 3246517590034086229</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>044A307265000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1244688997</td>
<td><code>0464EC7325000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1693217573</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>045851F6D9000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1481766617</td>
<td><code>047248AE71000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1917365873</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>E2A20378807DD3387B46CEC6CC918F48</code></td>
<td><code>32E057DC820E1367DAC9FDEFB00DFAE3</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>48, 16</td>
<td><code>9254F393E5FB438698FA57A7441D9838</code></td>
<td><code>876998EC69F2D28B691257F3D95284D8</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce</td>
<td>64, 32</td>
<td><code>84801F4C0AE12BA410947A69D0B28B44</code> <code>029D2301CA741B38141117366E2894E6</code></td>
<td><code>6053539702E3B345951B830A11EDB830</code> <code>560D5A46F8150F31EF7592CAA586F1F8</code></td>
<td>Client-generated random number</td>
</tr>
<tr>
@ -291,39 +291,39 @@ q = 1481766617</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 = 955FF5A908199868305AF3059D000000044A307265000000045851F6D9000000E2A20378807DD3387B46CEC6CC918F489254F393E5FB438698FA57A7441D983884801F4C0AE12BA410947A69D0B28B44029D2301CA741B38141117366E2894E602000000
random_padding_bytes = 7B5BC33A172357E71025980827959970B32388764D3215F03A0185A2B5C4671B54D0FFB91701C8811C154A0CCD9F77E7DDEA868958A9D2320EDA2A41838913929881BF04F8EB602255206115B9117648FDE7938E0351CC499C8F8A0A</code></pre>
<pre><code>data = 955FF5A9082D0DF28C1F09F9550000000464EC7325000000047248AE7100000032E057DC820E1367DAC9FDEFB00DFAE3876998EC69F2D28B691257F3D95284D86053539702E3B345951B830A11EDB830560D5A46F8150F31EF7592CAA586F1F802000000
random_padding_bytes = 952ED4932915DBDB298617BE299380F501C64BF57F488A9D3B7A2CEBD4EC17E4E8DAB5B69F934BC7D7A838D08DB60D41E2F9872B9C73F48280462D2BF9181C6B36878897BA33B386EC6AA2A3401978600202E153D39FC24E917D09DF</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 = 4DDA98052432E52B903D07CD37A79CAC04EACCDBEEB6B425F5DDD036995F0E17360208AFAFF1EF35F4B6E37BA720CA10CCC9C910301DE511920A2133B4EECAEF096F7B84691E83E92E26A3F997789AF6855582FB83B99FF14F98F921159A2484AE836BB3D1601A861D77539AE0CC5826E40491A1B7CED6781C87D5CA7C5D5C29C80F688860D99421E3EBF133B26008EBE78DD19F05CF34221EAD235BA75AD0C1FECEF133BAA77E5D98334F7E58DB88951AFA0B763CD6EAD3815FCC509A24CA0D16026B349CAD85994281D2C2BA996D9DECFB1EF4738E06ED5678600DA11CF93A1683517CD9332321A87691B190B1FDEEAEA570881F564B2D5A129E162A7F6D65</code></pre>
<pre><code>encrypted_data = 8EDF03011B64DF2831577B8DBF0E739E04398A81A3249573DC873FF2F823D4ABE628438C59F1DF2D579DC845C5DB1037AA133836F8F41928BB41FD9709BDB288D52324C21FC89672E46302DF5AC6459A9ABEAB5C7EE29784935F2B396D54CB2580891E378B32DA6811B095C4F109BA10203F379DD98CE3D93DD34052BF70F77ED04D8E75538D33F7B86033D5CB9D1F4A8FA437D30C0D352EC6D52E382B8C105AD2478ACAC2B344B7D6804D30434FF8640FA0A9E34C15B46F89A54B8D875E34A0DF9F723F2F6751FDE78FCC7679A59A12D15AFAF408C1462858D0274895B481D9356C27830E2AB78B3DA7B31CD940F636AF29DB9ED38C841ED600BBBB825C4D93</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 DC 91 0B 00 92 48 6A 65
0010 | 40 01 00 00 BE E4 12 D7 E2 A2 03 78 80 7D D3 38
0020 | 7B 46 CE C6 CC 91 8F 48 92 54 F3 93 E5 FB 43 86
0030 | 98 FA 57 A7 44 1D 98 38 04 4A 30 72 65 00 00 00
0040 | 04 58 51 F6 D9 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 4D DA 98 05 24 32 E5 2B 90 3D 07 CD
0060 | 37 A7 9C AC 04 EA CC DB EE B6 B4 25 F5 DD D0 36
0070 | 99 5F 0E 17 36 02 08 AF AF F1 EF 35 F4 B6 E3 7B
0080 | A7 20 CA 10 CC C9 C9 10 30 1D E5 11 92 0A 21 33
0090 | B4 EE CA EF 09 6F 7B 84 69 1E 83 E9 2E 26 A3 F9
00A0 | 97 78 9A F6 85 55 82 FB 83 B9 9F F1 4F 98 F9 21
00B0 | 15 9A 24 84 AE 83 6B B3 D1 60 1A 86 1D 77 53 9A
00C0 | E0 CC 58 26 E4 04 91 A1 B7 CE D6 78 1C 87 D5 CA
00D0 | 7C 5D 5C 29 C8 0F 68 88 60 D9 94 21 E3 EB F1 33
00E0 | B2 60 08 EB E7 8D D1 9F 05 CF 34 22 1E AD 23 5B
00F0 | A7 5A D0 C1 FE CE F1 33 BA A7 7E 5D 98 33 4F 7E
0100 | 58 DB 88 95 1A FA 0B 76 3C D6 EA D3 81 5F CC 50
0110 | 9A 24 CA 0D 16 02 6B 34 9C AD 85 99 42 81 D2 C2
0120 | BA 99 6D 9D EC FB 1E F4 73 8E 06 ED 56 78 60 0D
0130 | A1 1C F9 3A 16 83 51 7C D9 33 23 21 A8 76 91 B1
0140 | 90 B1 FD EE AE A5 70 88 1F 56 4B 2D 5A 12 9E 16
0150 | 2A 7F 6D 65</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 58 38 09 00 77 57 6A 65
0010 | 40 01 00 00 BE E4 12 D7 32 E0 57 DC 82 0E 13 67
0020 | DA C9 FD EF B0 0D FA E3 87 69 98 EC 69 F2 D2 8B
0030 | 69 12 57 F3 D9 52 84 D8 04 64 EC 73 25 00 00 00
0040 | 04 72 48 AE 71 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 8E DF 03 01 1B 64 DF 28 31 57 7B 8D
0060 | BF 0E 73 9E 04 39 8A 81 A3 24 95 73 DC 87 3F F2
0070 | F8 23 D4 AB E6 28 43 8C 59 F1 DF 2D 57 9D C8 45
0080 | C5 DB 10 37 AA 13 38 36 F8 F4 19 28 BB 41 FD 97
0090 | 09 BD B2 88 D5 23 24 C2 1F C8 96 72 E4 63 02 DF
00A0 | 5A C6 45 9A 9A BE AB 5C 7E E2 97 84 93 5F 2B 39
00B0 | 6D 54 CB 25 80 89 1E 37 8B 32 DA 68 11 B0 95 C4
00C0 | F1 09 BA 10 20 3F 37 9D D9 8C E3 D9 3D D3 40 52
00D0 | BF 70 F7 7E D0 4D 8E 75 53 8D 33 F7 B8 60 33 D5
00E0 | CB 9D 1F 4A 8F A4 37 D3 0C 0D 35 2E C6 D5 2E 38
00F0 | 2B 8C 10 5A D2 47 8A CA C2 B3 44 B7 D6 80 4D 30
0100 | 43 4F F8 64 0F A0 A9 E3 4C 15 B4 6F 89 A5 4B 8D
0110 | 87 5E 34 A0 DF 9F 72 3F 2F 67 51 FD E7 8F CC 76
0120 | 79 A5 9A 12 D1 5A FA F4 08 C1 46 28 58 D0 27 48
0130 | 95 B4 81 D9 35 6C 27 83 0E 2A B7 8B 3D A7 B3 1C
0140 | D9 40 F6 36 AF 29 DB 9E D3 8C 84 1E D6 00 BB BB
0150 | 82 5C 4D 93</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 = 7B5BC33A172357E71025980827959970B32388764D3215F03A0185A2B
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>DC910B0092486A65</code></td>
<td><code>5838090077576A65</code></td>
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() &lt;&lt; 32) + (N*4)</td>
</tr>
<tr>
@ -363,25 +363,25 @@ random_padding_bytes = 7B5BC33A172357E71025980827959970B32388764D3215F03A0185A2B
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>E2A20378807DD3387B46CEC6CC918F48</code></td>
<td><code>32E057DC820E1367DAC9FDEFB00DFAE3</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>9254F393E5FB438698FA57A7441D9838</code></td>
<td><code>876998EC69F2D28B691257F3D95284D8</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>p</td>
<td>56, 8</td>
<td><code>044A307265000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1244688997</td>
<td><code>0464EC7325000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1693217573</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>045851F6D9000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1481766617</td>
<td><code>047248AE71000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1917365873</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 = 7B5BC33A172357E71025980827959970B32388764D3215F03A0185A2B
<tr>
<td>encrypted_data</td>
<td>80, 260</td>
<td><code>FE0001004DDA98052432E52B903D07CD</code> <code>37A79CAC04EACCDBEEB6B425F5DDD036</code> <code>995F0E17360208AFAFF1EF35F4B6E37B</code> <code>A720CA10CCC9C910301DE511920A2133</code> <code>B4EECAEF096F7B84691E83E92E26A3F9</code> <code>97789AF6855582FB83B99FF14F98F921</code> <code>159A2484AE836BB3D1601A861D77539A</code> <code>E0CC5826E40491A1B7CED6781C87D5CA</code> <code>7C5D5C29C80F688860D99421E3EBF133</code> <code>B26008EBE78DD19F05CF34221EAD235B</code> <code>A75AD0C1FECEF133BAA77E5D98334F7E</code> <code>58DB88951AFA0B763CD6EAD3815FCC50</code> <code>9A24CA0D16026B349CAD85994281D2C2</code> <code>BA996D9DECFB1EF4738E06ED5678600D</code> <code>A11CF93A1683517CD9332321A87691B1</code> <code>90B1FDEEAEA570881F564B2D5A129E16</code><br> <code>2A7F6D65</code></td>
<td><code>FE0001008EDF03011B64DF2831577B8D</code> <code>BF0E739E04398A81A3249573DC873FF2</code> <code>F823D4ABE628438C59F1DF2D579DC845</code> <code>C5DB1037AA133836F8F41928BB41FD97</code> <code>09BDB288D52324C21FC89672E46302DF</code> <code>5AC6459A9ABEAB5C7EE29784935F2B39</code> <code>6D54CB2580891E378B32DA6811B095C4</code> <code>F109BA10203F379DD98CE3D93DD34052</code> <code>BF70F77ED04D8E75538D33F7B86033D5</code> <code>CB9D1F4A8FA437D30C0D352EC6D52E38</code> <code>2B8C105AD2478ACAC2B344B7D6804D30</code> <code>434FF8640FA0A9E34C15B46F89A54B8D</code> <code>875E34A0DF9F723F2F6751FDE78FCC76</code> <code>79A59A12D15AFAF408C1462858D02748</code> <code>95B481D9356C27830E2AB78B3DA7B31C</code> <code>D940F636AF29DB9ED38C841ED600BBBB</code><br> <code>825C4D93</code></td>
<td>Value generated above</td>
</tr>
</tbody>
@ -402,47 +402,47 @@ random_padding_bytes = 7B5BC33A172357E71025980827959970B32388764D3215F03A0185A2B
<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 D8 22 0B 93 48 6A 65
0010 | E4 02 00 00 5C 07 E8 D0 E2 A2 03 78 80 7D D3 38
0020 | 7B 46 CE C6 CC 91 8F 48 92 54 F3 93 E5 FB 43 86
0030 | 98 FA 57 A7 44 1D 98 38 FE 50 02 00 A1 19 B0 C4
0040 | D9 50 62 A7 D7 26 69 67 D1 75 05 15 E8 1B A5 B6
0050 | 6B 4F 92 47 73 B8 20 64 EC 7E D7 B7 D6 6B DD 9F
0060 | D0 27 BF 71 D0 65 7F 8E F4 CF C6 02 BD 74 71 32
0070 | 42 8C 4B C2 10 F9 CA 94 2D E2 9F 43 4A 43 23 62
0080 | 80 41 A7 AE 60 00 CD 43 0C 80 95 31 5D 2C FB B0
0090 | E9 A2 D6 24 4A A5 0A B3 0F 78 F9 2A A0 6D 21 C4
00A0 | FC 47 B0 BB 63 CC A3 D8 82 27 31 6A 8F 8E 8A 55
00B0 | 4B 34 CA 21 CF 35 27 7B 25 54 CD B9 9C 81 DB A6
00C0 | A4 E1 DD 4C 2C 76 AA 7A 61 DC CB E1 92 87 54 89
00D0 | 75 A1 B0 82 7D 43 4B B5 86 66 49 15 73 33 11 0F
00E0 | 77 A7 7B 2A 8D 6C 24 9C A6 09 C0 D7 6E 6D 87 BD
00F0 | BB A4 05 9F 7F 55 DD 12 B9 EE C2 8F 52 E3 86 C6
0100 | 81 F0 18 3B 82 EC 49 4B 2F 92 F0 B9 C3 8F BF 2E
0110 | 3F E0 E4 8F 67 5A 25 7E 13 77 6C AD 99 C5 FB AC
0120 | 73 22 D7 ED 44 71 31 C7 97 DE FD D1 24 58 66 ED
0130 | CA 85 53 C6 E0 6D C0 10 78 B0 AA AA 1A 7A 31 42
0140 | 76 EF 31 DC 3C 65 2C 47 2E C7 F8 F1 CE C0 33 5C
0150 | A2 E0 26 C8 79 E6 E9 11 E6 59 BE EA 10 D4 74 C9
0160 | EA 3C A9 8C A7 82 BB 3A 9C 2B DA 5C F8 26 57 A0
0170 | B9 04 6A 6A 90 94 76 5F 7B 15 3F A9 3B 84 B7 23
0180 | FA FC BE 49 49 3D A2 30 A4 DF C9 FA 5A A8 E9 43
0190 | F0 F5 34 FF 8D C2 2C 62 DE 6D FB FF C8 E0 ED B7
01A0 | BB E5 8D 50 F5 33 CD 2B 58 79 CB 3C D0 8F A6 4E
01B0 | 7A 42 62 29 B9 60 B9 51 83 8B B4 D0 38 43 7B 25
01C0 | E4 63 1E 5C 1B 1C 3C AB 5E 92 8C 45 86 7B 81 DF
01D0 | F5 B3 5A CB 8B 08 00 AA 5C EA CB C6 48 C3 9A 45
01E0 | CB 0F 77 DD F8 7A 11 28 55 27 1F 37 EA DE 7A B6
01F0 | AB 93 5C D9 20 C6 65 73 85 56 CC 3B E5 91 22 4E
0200 | 19 88 18 BD 4C C2 57 C8 36 BF EA 64 05 76 47 74
0210 | DE DB 1A 69 F3 F0 3B 2F 1E D6 D3 7F 40 7F 59 1E
0220 | F8 AC 33 07 C2 6D 4F 4E AE 96 6D 3E 0E EF AD D9
0230 | 42 31 F7 48 FF D9 4F 43 B1 21 6E 79 49 DD 5F FA
0240 | 1C FD A5 CA 5E 20 D0 B5 7C 2F BB 44 06 8B 00 A0
0250 | 74 D5 03 11 CD 50 7A 36 13 8B 7B 87 C8 AB FD 8B
0260 | 79 9A 53 0C C7 9A 54 0A BC CF 72 B8 F9 B1 75 A6
0270 | FC FC FB 9B 16 03 FD 3C EF 49 93 51 39 CA 78 9C
0280 | 99 45 CA 49 DC 03 70 C2 83 4B DF 08</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 28 70 63 78 57 6A 65
0010 | 8C 02 00 00 5C 07 E8 D0 32 E0 57 DC 82 0E 13 67
0020 | DA C9 FD EF B0 0D FA E3 87 69 98 EC 69 F2 D2 8B
0030 | 69 12 57 F3 D9 52 84 D8 FE 50 02 00 C1 7D E3 9B
0040 | D4 AA 78 4B C8 4B 89 16 CF A0 08 DE C1 40 88 0A
0050 | A6 A1 DD B0 D1 AF DA E9 D8 40 66 2E 41 70 3A 97
0060 | 00 6C 94 F7 7B 13 73 21 78 A4 5F B9 3A 20 D2 D0
0070 | D9 B8 C3 F5 73 4B 38 FE BE 91 69 55 30 C2 D5 CF
0080 | C1 A7 30 45 38 0D 5D 11 B1 D7 2E 88 21 E6 43 87
0090 | 78 33 E8 1B 64 DC 76 F8 1F 20 30 F7 8A 10 7A 8C
00A0 | 7F 08 EF 6C FD DD 84 71 F0 8D 17 15 C1 96 1B 98
00B0 | 31 6A 54 4B D9 B1 0A 86 E3 F5 5F 75 78 13 96 14
00C0 | 6B E6 68 B3 1E 4B A7 DD 54 32 CA 04 F1 27 B8 05
00D0 | CA C5 87 14 9E ED C2 17 7F 4B C3 63 E9 70 EB 2F
00E0 | D3 30 31 B8 AE 04 65 8B E9 64 08 B9 5F CF 6F AF
00F0 | 79 13 AC 2B 15 E9 52 73 B7 58 42 B2 E8 FD C6 C9
0100 | CF B1 11 A4 2B EB DB 71 3B 34 FB 94 6B 7C 3D F5
0110 | 8E E2 99 7C 6C 99 CC 3C E8 5E EF 80 52 5C BD C4
0120 | B6 79 E0 56 59 86 67 5A 56 22 DA 67 5D EA 47 16
0130 | F1 45 A5 25 51 8E FE 3B A2 25 01 58 0B CF 18 9D
0140 | 91 F1 30 C3 AB 18 F3 D1 17 08 4E 14 AE 31 66 56
0150 | 8C 26 4D 1C A5 F2 6A 49 02 3C E2 CD 9E 3F C1 8E
0160 | B1 0F EE F8 71 12 D5 F9 2F 72 B4 16 4B 36 A8 48
0170 | 12 B0 40 53 0E 53 4D EE DE 97 5F 9A CE 07 B9 1E
0180 | CE A9 38 3E 91 C1 A8 59 C0 C6 09 BB 75 8E A4 21
0190 | 11 DF 60 0F 79 8A C5 7E 26 A7 AB E3 79 EF C2 D1
01A0 | FB B0 D4 43 4B E6 4D AC 69 35 DC 05 6F 31 B7 F7
01B0 | 88 98 15 AE 7D D7 5F 1B F9 65 E6 2B 54 E8 97 D5
01C0 | DE CD 2A 45 79 82 CE C6 81 72 DA 40 78 6D 42 5D
01D0 | 28 32 E5 E1 58 A7 91 B4 78 76 78 FD 75 97 74 5F
01E0 | A7 14 35 35 39 C9 64 BA 9E 53 C8 1F 1D 16 03 DC
01F0 | 20 6F 9A 6D BB A4 9D D1 9A 0E 62 A7 04 2D F6 49
0200 | 7F CB 56 E3 F3 45 0E FD 98 A6 CA 39 86 2A B2 4E
0210 | 4F F1 B9 D7 5B 3D F8 81 52 EC F0 AA 9E 62 40 E3
0220 | 9C 0B 18 77 FA 64 90 E2 E5 A7 B1 C1 33 4D 73 C8
0230 | AE E6 CC F7 81 32 CE 64 27 D8 78 E8 7C E1 5A 46
0240 | 0D 23 0B 50 7D 45 3A 02 AC A1 35 CF 81 B4 55 EE
0250 | 1F 7D DF 8F EF D9 2F 1D 94 29 60 8A 7D 88 3A 07
0260 | AC 79 96 AD BE FF D2 A0 92 09 FD 1F 4A D1 15 15
0270 | 32 BF 12 ED B0 2E 49 A1 1A 6E 7E 49 49 87 FD 78
0280 | 6B A8 83 68 93 E8 EF 60 19 D0 09 B7</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,13 +464,13 @@ random_padding_bytes = 7B5BC33A172357E71025980827959970B32388764D3215F03A0185A2B
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>01D8220B93486A65</code></td>
<td><code>0128706378576A65</code></td>
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() &lt;&lt; 32) + (N*4)</td>
</tr>
<tr>
<td>message_length</td>
<td>16, 4</td>
<td><code>E4020000</code> (740 in decimal)</td>
<td><code>8C020000</code> (652 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -482,19 +482,19 @@ random_padding_bytes = 7B5BC33A172357E71025980827959970B32388764D3215F03A0185A2B
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>E2A20378807DD3387B46CEC6CC918F48</code></td>
<td><code>32E057DC820E1367DAC9FDEFB00DFAE3</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>9254F393E5FB438698FA57A7441D9838</code></td>
<td><code>876998EC69F2D28B691257F3D95284D8</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_answer</td>
<td>56, 596</td>
<td><code>FE500200A119B0C4D95062A7D7266967</code> <code>D1750515E81BA5B66B4F924773B82064</code> <code>EC7ED7B7D66BDD9FD027BF71D0657F8E</code> <code>F4CFC602BD747132428C4BC210F9CA94</code> <code>2DE29F434A4323628041A7AE6000CD43</code> <code>0C8095315D2CFBB0E9A2D6244AA50AB3</code> <code>0F78F92AA06D21C4FC47B0BB63CCA3D8</code> <code>8227316A8F8E8A554B34CA21CF35277B</code> <code>2554CDB99C81DBA6A4E1DD4C2C76AA7A</code> <code>61DCCBE19287548975A1B0827D434BB5</code> <code>866649157333110F77A77B2A8D6C249C</code> <code>A609C0D76E6D87BDBBA4059F7F55DD12</code> <code>B9EEC28F52E386C681F0183B82EC494B</code> <code>2F92F0B9C38FBF2E3FE0E48F675A257E</code> <code>13776CAD99C5FBAC7322D7ED447131C7</code> <code>97DEFDD1245866EDCA8553C6E06DC010</code> <code>78B0AAAA1A7A314276EF31DC3C652C47</code> <code>2EC7F8F1CEC0335CA2E026C879E6E911</code> <code>E659BEEA10D474C9EA3CA98CA782BB3A</code> <code>9C2BDA5CF82657A0B9046A6A9094765F</code> <code>7B153FA93B84B723FAFCBE49493DA230</code> <code>A4DFC9FA5AA8E943F0F534FF8DC22C62</code> <code>DE6DFBFFC8E0EDB7BBE58D50F533CD2B</code> <code>5879CB3CD08FA64E7A426229B960B951</code> <code>838BB4D038437B25E4631E5C1B1C3CAB</code> <code>5E928C45867B81DFF5B35ACB8B0800AA</code> <code>5CEACBC648C39A45CB0F77DDF87A1128</code> <code>55271F37EADE7AB6AB935CD920C66573</code> <code>8556CC3BE591224E198818BD4CC257C8</code> <code>36BFEA6405764774DEDB1A69F3F03B2F</code> <code>1ED6D37F407F591EF8AC3307C26D4F4E</code> <code>AE966D3E0EEFADD94231F748FFD94F43</code> <code>B1216E7949DD5FFA1CFDA5CA5E20D0B5</code> <code>7C2FBB44068B00A074D50311CD507A36</code> <code>138B7B87C8ABFD8B799A530CC79A540A</code> <code>BCCF72B8F9B175A6FCFCFB9B1603FD3C</code> <code>EF49935139CA789C9945CA49DC0370C2</code><br> <code>834BDF08</code></td>
<td><code>FE500200C17DE39BD4AA784BC84B8916</code> <code>CFA008DEC140880AA6A1DDB0D1AFDAE9</code> <code>D840662E41703A97006C94F77B137321</code> <code>78A45FB93A20D2D0D9B8C3F5734B38FE</code> <code>BE91695530C2D5CFC1A73045380D5D11</code> <code>B1D72E8821E643877833E81B64DC76F8</code> <code>1F2030F78A107A8C7F08EF6CFDDD8471</code> <code>F08D1715C1961B98316A544BD9B10A86</code> <code>E3F55F75781396146BE668B31E4BA7DD</code> <code>5432CA04F127B805CAC587149EEDC217</code> <code>7F4BC363E970EB2FD33031B8AE04658B</code> <code>E96408B95FCF6FAF7913AC2B15E95273</code> <code>B75842B2E8FDC6C9CFB111A42BEBDB71</code> <code>3B34FB946B7C3DF58EE2997C6C99CC3C</code> <code>E85EEF80525CBDC4B679E0565986675A</code> <code>5622DA675DEA4716F145A525518EFE3B</code> <code>A22501580BCF189D91F130C3AB18F3D1</code> <code>17084E14AE3166568C264D1CA5F26A49</code> <code>023CE2CD9E3FC18EB10FEEF87112D5F9</code> <code>2F72B4164B36A84812B040530E534DEE</code> <code>DE975F9ACE07B91ECEA9383E91C1A859</code> <code>C0C609BB758EA42111DF600F798AC57E</code> <code>26A7ABE379EFC2D1FBB0D4434BE64DAC</code> <code>6935DC056F31B7F7889815AE7DD75F1B</code> <code>F965E62B54E897D5DECD2A457982CEC6</code> <code>8172DA40786D425D2832E5E158A791B4</code> <code>787678FD7597745FA714353539C964BA</code> <code>9E53C81F1D1603DC206F9A6DBBA49DD1</code> <code>9A0E62A7042DF6497FCB56E3F3450EFD</code> <code>98A6CA39862AB24E4FF1B9D75B3DF881</code> <code>52ECF0AA9E6240E39C0B1877FA6490E2</code> <code>E5A7B1C1334D73C8AEE6CCF78132CE64</code> <code>27D878E87CE15A460D230B507D453A02</code> <code>ACA135CF81B455EE1F7DDF8FEFD92F1D</code> <code>9429608A7D883A07AC7996ADBEFFD2A0</code> <code>9209FD1F4AD1151532BF12EDB02E49A1</code> <code>1A6E7E494987FD786BA8836893E8EF60</code><br> <code>19D009B7</code></td>
<td>See below</td>
</tr>
</tbody>
@ -502,20 +502,20 @@ random_padding_bytes = 7B5BC33A172357E71025980827959970B32388764D3215F03A0185A2B
<!-- 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 = A119B0C4D95062A7D7266967D1750515E81BA5B66B4F924773B82064EC7ED7B7D66BDD9FD027BF71D0657F8EF4CFC602BD747132428C4BC210F9CA942DE29F434A4323628041A7AE6000CD430C8095315D2CFBB0E9A2D6244AA50AB30F78F92AA06D21C4FC47B0BB63CCA3D88227316A8F8E8A554B34CA21CF35277B2554CDB99C81DBA6A4E1DD4C2C76AA7A61DCCBE19287548975A1B0827D434BB5866649157333110F77A77B2A8D6C249CA609C0D76E6D87BDBBA4059F7F55DD12B9EEC28F52E386C681F0183B82EC494B2F92F0B9C38FBF2E3FE0E48F675A257E13776CAD99C5FBAC7322D7ED447131C797DEFDD1245866EDCA8553C6E06DC01078B0AAAA1A7A314276EF31DC3C652C472EC7F8F1CEC0335CA2E026C879E6E911E659BEEA10D474C9EA3CA98CA782BB3A9C2BDA5CF82657A0B9046A6A9094765F7B153FA93B84B723FAFCBE49493DA230A4DFC9FA5AA8E943F0F534FF8DC22C62DE6DFBFFC8E0EDB7BBE58D50F533CD2B5879CB3CD08FA64E7A426229B960B951838BB4D038437B25E4631E5C1B1C3CAB5E928C45867B81DFF5B35ACB8B0800AA5CEACBC648C39A45CB0F77DDF87A112855271F37EADE7AB6AB935CD920C665738556CC3BE591224E198818BD4CC257C836BFEA6405764774DEDB1A69F3F03B2F1ED6D37F407F591EF8AC3307C26D4F4EAE966D3E0EEFADD94231F748FFD94F43B1216E7949DD5FFA1CFDA5CA5E20D0B57C2FBB44068B00A074D50311CD507A36138B7B87C8ABFD8B799A530CC79A540ABCCF72B8F9B175A6FCFCFB9B1603FD3CEF49935139CA789C9945CA49DC0370C2834BDF08
tmp_aes_key = E8934AA8785EB376BF5AF1DC8E6CCF115E85119979BF221D614927806C1C180E
tmp_aes_iv = 283FE0D00A698688BCFBEB86198DF96B2613AFEB015932561E9D7CA284801F4C</code></pre>
<pre><code>encrypted_answer = C17DE39BD4AA784BC84B8916CFA008DEC140880AA6A1DDB0D1AFDAE9D840662E41703A97006C94F77B13732178A45FB93A20D2D0D9B8C3F5734B38FEBE91695530C2D5CFC1A73045380D5D11B1D72E8821E643877833E81B64DC76F81F2030F78A107A8C7F08EF6CFDDD8471F08D1715C1961B98316A544BD9B10A86E3F55F75781396146BE668B31E4BA7DD5432CA04F127B805CAC587149EEDC2177F4BC363E970EB2FD33031B8AE04658BE96408B95FCF6FAF7913AC2B15E95273B75842B2E8FDC6C9CFB111A42BEBDB713B34FB946B7C3DF58EE2997C6C99CC3CE85EEF80525CBDC4B679E0565986675A5622DA675DEA4716F145A525518EFE3BA22501580BCF189D91F130C3AB18F3D117084E14AE3166568C264D1CA5F26A49023CE2CD9E3FC18EB10FEEF87112D5F92F72B4164B36A84812B040530E534DEEDE975F9ACE07B91ECEA9383E91C1A859C0C609BB758EA42111DF600F798AC57E26A7ABE379EFC2D1FBB0D4434BE64DAC6935DC056F31B7F7889815AE7DD75F1BF965E62B54E897D5DECD2A457982CEC68172DA40786D425D2832E5E158A791B4787678FD7597745FA714353539C964BA9E53C81F1D1603DC206F9A6DBBA49DD19A0E62A7042DF6497FCB56E3F3450EFD98A6CA39862AB24E4FF1B9D75B3DF88152ECF0AA9E6240E39C0B1877FA6490E2E5A7B1C1334D73C8AEE6CCF78132CE6427D878E87CE15A460D230B507D453A02ACA135CF81B455EE1F7DDF8FEFD92F1D9429608A7D883A07AC7996ADBEFFD2A09209FD1F4AD1151532BF12EDB02E49A11A6E7E494987FD786BA8836893E8EF6019D009B7
tmp_aes_key = 1FA0C6C36D28340F63C36679A188F02CBC03D6791638C1933344638328FA854A
tmp_aes_iv = 220ECFDF406702AC5470D1E4CB02A9E4978FD532FF34E56D05742C3B60535397</code></pre>
<!-- end server_DH_inner_data_input -->
<p>Yielding:</p>
<!-- start server_DH_inner_data_output -->
<pre><code>answer_with_hash = 6589FB2BE1C907C660B97611E0A07C02D67D961ABA0D89B5E2A20378807DD3387B46CEC6CC918F489254F393E5FB438698FA57A7441D983803000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE0001008C0E47ACCCE07622B99F900EF624AE698AA069C0435B4B13E975E834ABE075AD01811CA9D7E3CAB6634E01024E43CC52CF983695BD7D6A31E1070159809EFF8FC91D92C83EBC3979EA49E24157EE36AE4B165358C9A3EB9C0065ECBBA6F6B7A8A5B8E390DDD7F5B1B12B49DAEAC52532035F695944792A0801F4E34490AB5B06027AFCE3D419E3B73B5B375D369852EF8EC7382FB6E1ECA75CB2282AF2D7AD60787188309E7A79ECF02DAE48FD516CF649D94088E4FE41D1439AF85D4888BDFCBA5C5147CC28FE56A35C89EB59242DE38701CEE3170F5AE545A05BCC824B2C1E12C381600CACA85451FDA2DF2F7A9C37D37BB3BB2F8CF2293DC185BD8FEBBC8593486A65047EF7BB0E81704B
answer = BA0D89B5E2A20378807DD3387B46CEC6CC918F489254F393E5FB438698FA57A7441D983803000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE0001008C0E47ACCCE07622B99F900EF624AE698AA069C0435B4B13E975E834ABE075AD01811CA9D7E3CAB6634E01024E43CC52CF983695BD7D6A31E1070159809EFF8FC91D92C83EBC3979EA49E24157EE36AE4B165358C9A3EB9C0065ECBBA6F6B7A8A5B8E390DDD7F5B1B12B49DAEAC52532035F695944792A0801F4E34490AB5B06027AFCE3D419E3B73B5B375D369852EF8EC7382FB6E1ECA75CB2282AF2D7AD60787188309E7A79ECF02DAE48FD516CF649D94088E4FE41D1439AF85D4888BDFCBA5C5147CC28FE56A35C89EB59242DE38701CEE3170F5AE545A05BCC824B2C1E12C381600CACA85451FDA2DF2F7A9C37D37BB3BB2F8CF2293DC185BD8FEBBC8593486A65047EF7BB0E81704B</code></pre>
<pre><code>answer_with_hash = F732413E871A433AECFB6FAC249466CEB1560585BA0D89B532E057DC820E1367DAC9FDEFB00DFAE3876998EC69F2D28B691257F3D95284D803000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE00010036818F1E00E7591F6A206F579064D243E9F0064137DBBFD1A690484E5AAFB7B9EF7BB2A8955E92E37A7271736944E35E7C10015D24A9863931E9ACA5EFDE76A01339FBBC0334908CBBBB08304FD7D8D15DF0A211ADE4AA2FE558CFBF223063C6CD0F00673A5E5DA0C49D450923F9CEE7FAC37E7F79DB1307C35C6D3AAF26C41A2B7E44EA360AD75B9994B90C43FD2B344D3AC5ED7FBD69CC04E74C3FAFB27027AE55D600E1F74D24984A735551100256A579029DD39739D85BACF4C16279FA6728CA5B187FD5CF585C9C4039E6EB43E7F52F5A12956A465B057757AD0282DB99A67D2C7060E942E5587FB6B99FD43CE0BF6D06CB5089ABECFAD8C5CEA3C52DA078576A6597337D3B9DC224B6
answer = BA0D89B532E057DC820E1367DAC9FDEFB00DFAE3876998EC69F2D28B691257F3D95284D803000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE00010036818F1E00E7591F6A206F579064D243E9F0064137DBBFD1A690484E5AAFB7B9EF7BB2A8955E92E37A7271736944E35E7C10015D24A9863931E9ACA5EFDE76A01339FBBC0334908CBBBB08304FD7D8D15DF0A211ADE4AA2FE558CFBF223063C6CD0F00673A5E5DA0C49D450923F9CEE7FAC37E7F79DB1307C35C6D3AAF26C41A2B7E44EA360AD75B9994B90C43FD2B344D3AC5ED7FBD69CC04E74C3FAFB27027AE55D600E1F74D24984A735551100256A579029DD39739D85BACF4C16279FA6728CA5B187FD5CF585C9C4039E6EB43E7F52F5A12956A465B057757AD0282DB99A67D2C7060E942E5587FB6B99FD43CE0BF6D06CB5089ABECFAD8C5CEA3C52DA078576A6597337D3B9DC224B6</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 E2 A2 03 78 80 7D D3 38 7B 46 CE C6
0010 | CC 91 8F 48 92 54 F3 93 E5 FB 43 86 98 FA 57 A7
0020 | 44 1D 98 38 03 00 00 00 FE 00 01 00 C7 1C AE B9
<pre><code>0000 | BA 0D 89 B5 32 E0 57 DC 82 0E 13 67 DA C9 FD EF
0010 | B0 0D FA E3 87 69 98 EC 69 F2 D2 8B 69 12 57 F3
0020 | D9 52 84 D8 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 = BA0D89B5E2A20378807DD3387B46CEC6CC918F489254F393E5FB438698FA57A7441D983
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 | 8C 0E 47 AC CC E0 76 22 B9 9F 90 0E F6 24 AE 69
0140 | 8A A0 69 C0 43 5B 4B 13 E9 75 E8 34 AB E0 75 AD
0150 | 01 81 1C A9 D7 E3 CA B6 63 4E 01 02 4E 43 CC 52
0160 | CF 98 36 95 BD 7D 6A 31 E1 07 01 59 80 9E FF 8F
0170 | C9 1D 92 C8 3E BC 39 79 EA 49 E2 41 57 EE 36 AE
0180 | 4B 16 53 58 C9 A3 EB 9C 00 65 EC BB A6 F6 B7 A8
0190 | A5 B8 E3 90 DD D7 F5 B1 B1 2B 49 DA EA C5 25 32
01A0 | 03 5F 69 59 44 79 2A 08 01 F4 E3 44 90 AB 5B 06
01B0 | 02 7A FC E3 D4 19 E3 B7 3B 5B 37 5D 36 98 52 EF
01C0 | 8E C7 38 2F B6 E1 EC A7 5C B2 28 2A F2 D7 AD 60
01D0 | 78 71 88 30 9E 7A 79 EC F0 2D AE 48 FD 51 6C F6
01E0 | 49 D9 40 88 E4 FE 41 D1 43 9A F8 5D 48 88 BD FC
01F0 | BA 5C 51 47 CC 28 FE 56 A3 5C 89 EB 59 24 2D E3
0200 | 87 01 CE E3 17 0F 5A E5 45 A0 5B CC 82 4B 2C 1E
0210 | 12 C3 81 60 0C AC A8 54 51 FD A2 DF 2F 7A 9C 37
0220 | D3 7B B3 BB 2F 8C F2 29 3D C1 85 BD 8F EB BC 85
0230 | 93 48 6A 65</code></pre>
0130 | 36 81 8F 1E 00 E7 59 1F 6A 20 6F 57 90 64 D2 43
0140 | E9 F0 06 41 37 DB BF D1 A6 90 48 4E 5A AF B7 B9
0150 | EF 7B B2 A8 95 5E 92 E3 7A 72 71 73 69 44 E3 5E
0160 | 7C 10 01 5D 24 A9 86 39 31 E9 AC A5 EF DE 76 A0
0170 | 13 39 FB BC 03 34 90 8C BB BB 08 30 4F D7 D8 D1
0180 | 5D F0 A2 11 AD E4 AA 2F E5 58 CF BF 22 30 63 C6
0190 | CD 0F 00 67 3A 5E 5D A0 C4 9D 45 09 23 F9 CE E7
01A0 | FA C3 7E 7F 79 DB 13 07 C3 5C 6D 3A AF 26 C4 1A
01B0 | 2B 7E 44 EA 36 0A D7 5B 99 94 B9 0C 43 FD 2B 34
01C0 | 4D 3A C5 ED 7F BD 69 CC 04 E7 4C 3F AF B2 70 27
01D0 | AE 55 D6 00 E1 F7 4D 24 98 4A 73 55 51 10 02 56
01E0 | A5 79 02 9D D3 97 39 D8 5B AC F4 C1 62 79 FA 67
01F0 | 28 CA 5B 18 7F D5 CF 58 5C 9C 40 39 E6 EB 43 E7
0200 | F5 2F 5A 12 95 6A 46 5B 05 77 57 AD 02 82 DB 99
0210 | A6 7D 2C 70 60 E9 42 E5 58 7F B6 B9 9F D4 3C E0
0220 | BF 6D 06 CB 50 89 AB EC FA D8 C5 CE A3 C5 2D A0
0230 | 78 57 6A 65</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 = BA0D89B5E2A20378807DD3387B46CEC6CC918F489254F393E5FB438698FA57A7441D983
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>E2A20378807DD3387B46CEC6CC918F48</code></td>
<td><code>32E057DC820E1367DAC9FDEFB00DFAE3</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>9254F393E5FB438698FA57A7441D9838</code></td>
<td><code>876998EC69F2D28B691257F3D95284D8</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
@ -594,13 +594,13 @@ answer = BA0D89B5E2A20378807DD3387B46CEC6CC918F489254F393E5FB438698FA57A7441D983
<tr>
<td>g_a</td>
<td>300, 260</td>
<td><code>FE0001008C0E47ACCCE07622B99F900E</code> <code>F624AE698AA069C0435B4B13E975E834</code> <code>ABE075AD01811CA9D7E3CAB6634E0102</code> <code>4E43CC52CF983695BD7D6A31E1070159</code> <code>809EFF8FC91D92C83EBC3979EA49E241</code> <code>57EE36AE4B165358C9A3EB9C0065ECBB</code> <code>A6F6B7A8A5B8E390DDD7F5B1B12B49DA</code> <code>EAC52532035F695944792A0801F4E344</code> <code>90AB5B06027AFCE3D419E3B73B5B375D</code> <code>369852EF8EC7382FB6E1ECA75CB2282A</code> <code>F2D7AD60787188309E7A79ECF02DAE48</code> <code>FD516CF649D94088E4FE41D1439AF85D</code> <code>4888BDFCBA5C5147CC28FE56A35C89EB</code> <code>59242DE38701CEE3170F5AE545A05BCC</code> <code>824B2C1E12C381600CACA85451FDA2DF</code> <code>2F7A9C37D37BB3BB2F8CF2293DC185BD</code><br> <code>8FEBBC85</code></td>
<td><code>FE00010036818F1E00E7591F6A206F57</code> <code>9064D243E9F0064137DBBFD1A690484E</code> <code>5AAFB7B9EF7BB2A8955E92E37A727173</code> <code>6944E35E7C10015D24A9863931E9ACA5</code> <code>EFDE76A01339FBBC0334908CBBBB0830</code> <code>4FD7D8D15DF0A211ADE4AA2FE558CFBF</code> <code>223063C6CD0F00673A5E5DA0C49D4509</code> <code>23F9CEE7FAC37E7F79DB1307C35C6D3A</code> <code>AF26C41A2B7E44EA360AD75B9994B90C</code> <code>43FD2B344D3AC5ED7FBD69CC04E74C3F</code> <code>AFB27027AE55D600E1F74D24984A7355</code> <code>51100256A579029DD39739D85BACF4C1</code> <code>6279FA6728CA5B187FD5CF585C9C4039</code> <code>E6EB43E7F52F5A12956A465B057757AD</code> <code>0282DB99A67D2C7060E942E5587FB6B9</code> <code>9FD43CE0BF6D06CB5089ABECFAD8C5CE</code><br> <code>A3C52DA0</code></td>
<td><code>g_a</code> diffie-hellman parameter</td>
</tr>
<tr>
<td>server_time</td>
<td>560, 4</td>
<td><code>93486A65</code> (1701464211 in decimal)</td>
<td><code>78576A65</code> (1701468024 in decimal)</td>
<td>Server time</td>
</tr>
</tbody>
@ -609,34 +609,34 @@ answer = BA0D89B5E2A20378807DD3387B46CEC6CC918F489254F393E5FB438698FA57A7441D983
<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 = 1161AEBD1183084F82308B0947C4B22D81CBFB34FDF1FF5C1A4E37F9CEF5EDB8AC656D7AC7EBFC065695369DC0E720CA447743A6D4586BC0533D27FE85EE088AA66BFB09CB3C2553AACAC48AB4E0212BDCDBB0B0C1C6A1043DCA9DA98109DD141337748CE3C226073CF61CB5C42AA2F53381962F9F3B52981A3DDE4CC875E969FC5B42A378C8C02FC9389B18BBD9C82199425F27A6DBB0BE8001B49845118BDCB6661CD71699A2C6220F441E0D8CA34FA62A143E85CA025F659AAD3633ED670F856C4CD0EC8F575CBAB029BBCFD59898CD46925D2DD4B9E0C7EB54588E81661634FED8D484981A0151A7468928F742EDEBA25B3C2402253A2C161A496E7500B5</code></pre>
<pre><code>b = FA223F79DB839C4032A866C22627E8A2BEDC7D7DD97750EC78C16A1DD1EEB5A7A524B278E3CBF338F6B4534FA2E1D02F54AFE9DE6D2A0EF202AC120EF371EB46EA441593A97B55D3D6C1D953D745D61184F55E62FEB477C9EFDAB7DA2F140F3120E6EDE8BEAEAE832CB044C5D21B72736BC218852C83E79D273906AAE118C3A7A1869B231D07957ED3CEFDBC9288FCFB7D67124ECB741DA87F2F09DE5C9446EF701AAB6C669387281AA33C3DA36FD729FF262BBF882A571DABC0B536CF61901DEECC74FB50EAACA96853C36EAF9CE9618A8D0D1631670018306CA8259487D5F5AB8284D66E788B839BAE3E86A84361ED6E1932F1BE136974300965F624A9874F</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 = 1EA6C38815262DC3A66343D108CECEF30EE4AC999AF46F9FECD0FF02CA2F6C6FF7FAFF1F24F74A2ABEE6A68040F8EAB08647E0BC7FD99D55F8AEC85CB349503F9083DD54B46E18CB0C2AE45EC11DC8854C35C12BF01BFE646F1990CA313F0E1EBF4BF2775DAF05ABD242BDA037F41FD1084819D9DA701929BD9874D3184A8217D75DECC302F82D48B22139385CE607C98196CB24C19C79720042DFBCEC639642E7C4BEF901B59A631E768AAD4650BE3F18CDCC14F1011D63D6B29DE5224EFAC7F7AC1FCD0131630BCB4805C39E2F50B00C5A99F51A9525AADF3A0A567DB8933ED079E6F0256BCB9CDE084D9F920ECD5E7819F5ACEAB1F21C4625A8B599702300</code></pre>
<pre><code>g_b = 4794207B47FFE9402E417C311BBB1E5AB2208C86C54618B57ADFE9F3F76E4BC1A2C1F9A673633995763B7D841ED27560274F053C655A9E449CF202C1694D66E1FE8908456D575CFA9FB95EF93FA70A83E25065759D532B696358DAC071BEC0190E277CB1498E73CE014C9CBA14BF8B0760A52EBC54BDE6F9F82E97B20A734EE02DB16E086B5CBC896E750F61EC581D4B24F0A2FA6D4E4D0E93A20B3FCD59DDA25AD614F71A2C3A321A4203D27C711B8092ED126CA3D2A2D41D19A6E412B6AA1D8CFF391250E594B688F103DDBF0BB2FEDCE1C803F72C784E894C85A41E7CD8C922F53C84C7B0D0C518E9F1478F89681430A96674B0203CCDD6FD5D3F5E0EEA79</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 E2 A2 03 78 80 7D D3 38 7B 46 CE C6
0010 | CC 91 8F 48 92 54 F3 93 E5 FB 43 86 98 FA 57 A7
0020 | 44 1D 98 38 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | 1E A6 C3 88 15 26 2D C3 A6 63 43 D1 08 CE CE F3
0040 | 0E E4 AC 99 9A F4 6F 9F EC D0 FF 02 CA 2F 6C 6F
0050 | F7 FA FF 1F 24 F7 4A 2A BE E6 A6 80 40 F8 EA B0
0060 | 86 47 E0 BC 7F D9 9D 55 F8 AE C8 5C B3 49 50 3F
0070 | 90 83 DD 54 B4 6E 18 CB 0C 2A E4 5E C1 1D C8 85
0080 | 4C 35 C1 2B F0 1B FE 64 6F 19 90 CA 31 3F 0E 1E
0090 | BF 4B F2 77 5D AF 05 AB D2 42 BD A0 37 F4 1F D1
00A0 | 08 48 19 D9 DA 70 19 29 BD 98 74 D3 18 4A 82 17
00B0 | D7 5D EC C3 02 F8 2D 48 B2 21 39 38 5C E6 07 C9
00C0 | 81 96 CB 24 C1 9C 79 72 00 42 DF BC EC 63 96 42
00D0 | E7 C4 BE F9 01 B5 9A 63 1E 76 8A AD 46 50 BE 3F
00E0 | 18 CD CC 14 F1 01 1D 63 D6 B2 9D E5 22 4E FA C7
00F0 | F7 AC 1F CD 01 31 63 0B CB 48 05 C3 9E 2F 50 B0
0100 | 0C 5A 99 F5 1A 95 25 AA DF 3A 0A 56 7D B8 93 3E
0110 | D0 79 E6 F0 25 6B CB 9C DE 08 4D 9F 92 0E CD 5E
0120 | 78 19 F5 AC EA B1 F2 1C 46 25 A8 B5 99 70 23 00</code></pre>
<pre><code>0000 | 54 B6 43 66 32 E0 57 DC 82 0E 13 67 DA C9 FD EF
0010 | B0 0D FA E3 87 69 98 EC 69 F2 D2 8B 69 12 57 F3
0020 | D9 52 84 D8 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | 47 94 20 7B 47 FF E9 40 2E 41 7C 31 1B BB 1E 5A
0040 | B2 20 8C 86 C5 46 18 B5 7A DF E9 F3 F7 6E 4B C1
0050 | A2 C1 F9 A6 73 63 39 95 76 3B 7D 84 1E D2 75 60
0060 | 27 4F 05 3C 65 5A 9E 44 9C F2 02 C1 69 4D 66 E1
0070 | FE 89 08 45 6D 57 5C FA 9F B9 5E F9 3F A7 0A 83
0080 | E2 50 65 75 9D 53 2B 69 63 58 DA C0 71 BE C0 19
0090 | 0E 27 7C B1 49 8E 73 CE 01 4C 9C BA 14 BF 8B 07
00A0 | 60 A5 2E BC 54 BD E6 F9 F8 2E 97 B2 0A 73 4E E0
00B0 | 2D B1 6E 08 6B 5C BC 89 6E 75 0F 61 EC 58 1D 4B
00C0 | 24 F0 A2 FA 6D 4E 4D 0E 93 A2 0B 3F CD 59 DD A2
00D0 | 5A D6 14 F7 1A 2C 3A 32 1A 42 03 D2 7C 71 1B 80
00E0 | 92 ED 12 6C A3 D2 A2 D4 1D 19 A6 E4 12 B6 AA 1D
00F0 | 8C FF 39 12 50 E5 94 B6 88 F1 03 DD BF 0B B2 FE
0100 | DC E1 C8 03 F7 2C 78 4E 89 4C 85 A4 1E 7C D8 C9
0110 | 22 F5 3C 84 C7 B0 D0 C5 18 E9 F1 47 8F 89 68 14
0120 | 30 A9 66 74 B0 20 3C CD D6 FD 5D 3F 5E 0E EA 79</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 = BA0D89B5E2A20378807DD3387B46CEC6CC918F489254F393E5FB438698FA57A7441D983
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>E2A20378807DD3387B46CEC6CC918F48</code></td>
<td><code>32E057DC820E1367DAC9FDEFB00DFAE3</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>9254F393E5FB438698FA57A7441D9838</code></td>
<td><code>876998EC69F2D28B691257F3D95284D8</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>g_b</td>
<td>36, 260</td>
<td><code>FE0001001EA6C38815262DC3A66343D1</code> <code>08CECEF30EE4AC999AF46F9FECD0FF02</code> <code>CA2F6C6FF7FAFF1F24F74A2ABEE6A680</code> <code>40F8EAB08647E0BC7FD99D55F8AEC85C</code> <code>B349503F9083DD54B46E18CB0C2AE45E</code> <code>C11DC8854C35C12BF01BFE646F1990CA</code> <code>313F0E1EBF4BF2775DAF05ABD242BDA0</code> <code>37F41FD1084819D9DA701929BD9874D3</code> <code>184A8217D75DECC302F82D48B2213938</code> <code>5CE607C98196CB24C19C79720042DFBC</code> <code>EC639642E7C4BEF901B59A631E768AAD</code> <code>4650BE3F18CDCC14F1011D63D6B29DE5</code> <code>224EFAC7F7AC1FCD0131630BCB4805C3</code> <code>9E2F50B00C5A99F51A9525AADF3A0A56</code> <code>7DB8933ED079E6F0256BCB9CDE084D9F</code> <code>920ECD5E7819F5ACEAB1F21C4625A8B5</code><br> <code>99702300</code></td>
<td><code>FE0001004794207B47FFE9402E417C31</code> <code>1BBB1E5AB2208C86C54618B57ADFE9F3</code> <code>F76E4BC1A2C1F9A673633995763B7D84</code> <code>1ED27560274F053C655A9E449CF202C1</code> <code>694D66E1FE8908456D575CFA9FB95EF9</code> <code>3FA70A83E25065759D532B696358DAC0</code> <code>71BEC0190E277CB1498E73CE014C9CBA</code> <code>14BF8B0760A52EBC54BDE6F9F82E97B2</code> <code>0A734EE02DB16E086B5CBC896E750F61</code> <code>EC581D4B24F0A2FA6D4E4D0E93A20B3F</code> <code>CD59DDA25AD614F71A2C3A321A4203D2</code> <code>7C711B8092ED126CA3D2A2D41D19A6E4</code> <code>12B6AA1D8CFF391250E594B688F103DD</code> <code>BF0BB2FEDCE1C803F72C784E894C85A4</code> <code>1E7CD8C922F53C84C7B0D0C518E9F147</code> <code>8F89681430A96674B0203CCDD6FD5D3F</code><br> <code>5E0EEA79</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 = BA0D89B5E2A20378807DD3387B46CEC6CC918F489254F393E5FB438698FA57A7441D983
<!-- 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 = 54B64366E2A20378807DD3387B46CEC6CC918F489254F393E5FB438698FA57A7441D98380000000000000000FE0001001EA6C38815262DC3A66343D108CECEF30EE4AC999AF46F9FECD0FF02CA2F6C6FF7FAFF1F24F74A2ABEE6A68040F8EAB08647E0BC7FD99D55F8AEC85CB349503F9083DD54B46E18CB0C2AE45EC11DC8854C35C12BF01BFE646F1990CA313F0E1EBF4BF2775DAF05ABD242BDA037F41FD1084819D9DA701929BD9874D3184A8217D75DECC302F82D48B22139385CE607C98196CB24C19C79720042DFBCEC639642E7C4BEF901B59A631E768AAD4650BE3F18CDCC14F1011D63D6B29DE5224EFAC7F7AC1FCD0131630BCB4805C39E2F50B00C5A99F51A9525AADF3A0A567DB8933ED079E6F0256BCB9CDE084D9F920ECD5E7819F5ACEAB1F21C4625A8B599702300
padding = A5BB328025F4BFBC2231E6EC
tmp_aes_key = E8934AA8785EB376BF5AF1DC8E6CCF115E85119979BF221D614927806C1C180E
tmp_aes_iv = 283FE0D00A698688BCFBEB86198DF96B2613AFEB015932561E9D7CA284801F4C</code></pre>
<pre><code>data = 54B6436632E057DC820E1367DAC9FDEFB00DFAE3876998EC69F2D28B691257F3D95284D80000000000000000FE0001004794207B47FFE9402E417C311BBB1E5AB2208C86C54618B57ADFE9F3F76E4BC1A2C1F9A673633995763B7D841ED27560274F053C655A9E449CF202C1694D66E1FE8908456D575CFA9FB95EF93FA70A83E25065759D532B696358DAC071BEC0190E277CB1498E73CE014C9CBA14BF8B0760A52EBC54BDE6F9F82E97B20A734EE02DB16E086B5CBC896E750F61EC581D4B24F0A2FA6D4E4D0E93A20B3FCD59DDA25AD614F71A2C3A321A4203D27C711B8092ED126CA3D2A2D41D19A6E412B6AA1D8CFF391250E594B688F103DDBF0BB2FEDCE1C803F72C784E894C85A41E7CD8C922F53C84C7B0D0C518E9F1478F89681430A96674B0203CCDD6FD5D3F5E0EEA79
padding = 3D0E887B866287F60AB02427
tmp_aes_key = 1FA0C6C36D28340F63C36679A188F02CBC03D6791638C1933344638328FA854A
tmp_aes_iv = 220ECFDF406702AC5470D1E4CB02A9E4978FD532FF34E56D05742C3B60535397</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 = 3E2942908CE41FC5B98721FC56302799B98E338A4D750D91126B4C3304E0E9B110E9C060389A241E5D96D047802D042DCDEDB07F53D34AC61EAFD03D293F70527E7CABCE16820922614F9A1BA94931CE5959F0B9900C692F585B84B061532AF9CFDC18818157DCF079D53687DDE7414466CCD941812EEB0E159BB3D72D96E7B66700F234FAA773A5992FF590E082C2266EB4D1884DE996D796450DBB0D72A12F35056BF0B126B22F1539347D23719A9EA99B3CC4EC50B82BC6C6794EAFA382C799DD74EF44AB5B038770E6561C80C81F422743BF6C08F266733DC758DBDF49B9E465BD29C8981DC16F576A4B5C02241DCC5038E118AE14BDDE48B00D350CD44082092314D7C9A8DDBC3A674ED3A3C3EABBC80B96EB048284EED13D788B1E30E865B607EB3C990EF82B2875D0BBC781540E1CB9422AE8D3A014C77BCEF4CA73762D7DF02542C61EC29F1AEF3043EFC0F4</code></pre>
<pre><code>encrypted_data = 66B0AD9E25FC2135F701BE15BD718C2532491B2AE8C015AACAD46D729A821DFAC4B6452FA1EC816CA2D703B138B4D20C713EB126B98B5B12EE3ED9624C876965C9432395F529CE5D21D85254343D213ED6FE54AFECE50C08183BE192F40C7405571C29322F4F3BBE01D5D71D928D9D559A47C73C6B72C48345AF3F92176B4B63F8BE8E9836378BA2FD2739D26A3ED48892A11A9E8FD02654B0CCB39CA9BB55F91DF7FF56CFCAFF11A592AEFAEC4D65D444F12BC2453DCF0AAFF7CCCF3FE9CDA1F6E372402DC37A397F2F0AEB75DE66B74DADBDBCD7969BF0AB870668A3D2E6B36ED9167855CF134E432A164CA000362A077DBD1646F3BA4E47E51764F9AEF0D0D4F89EEE2C2CC36B1E085E8133289DE510AC2696745330FC4FD49103995CC2556519D5CB27A924EAFAE46E6C8C7CB728FA99569541F2E2E188A18673EAF8C3E54CA0DB7C484F083F9F4165DD9EC603E3</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 D4 92 08 00 93 48 6A 65
0010 | 78 01 00 00 1F 5F 04 F5 E2 A2 03 78 80 7D D3 38
0020 | 7B 46 CE C6 CC 91 8F 48 92 54 F3 93 E5 FB 43 86
0030 | 98 FA 57 A7 44 1D 98 38 FE 50 01 00 3E 29 42 90
0040 | 8C E4 1F C5 B9 87 21 FC 56 30 27 99 B9 8E 33 8A
0050 | 4D 75 0D 91 12 6B 4C 33 04 E0 E9 B1 10 E9 C0 60
0060 | 38 9A 24 1E 5D 96 D0 47 80 2D 04 2D CD ED B0 7F
0070 | 53 D3 4A C6 1E AF D0 3D 29 3F 70 52 7E 7C AB CE
0080 | 16 82 09 22 61 4F 9A 1B A9 49 31 CE 59 59 F0 B9
0090 | 90 0C 69 2F 58 5B 84 B0 61 53 2A F9 CF DC 18 81
00A0 | 81 57 DC F0 79 D5 36 87 DD E7 41 44 66 CC D9 41
00B0 | 81 2E EB 0E 15 9B B3 D7 2D 96 E7 B6 67 00 F2 34
00C0 | FA A7 73 A5 99 2F F5 90 E0 82 C2 26 6E B4 D1 88
00D0 | 4D E9 96 D7 96 45 0D BB 0D 72 A1 2F 35 05 6B F0
00E0 | B1 26 B2 2F 15 39 34 7D 23 71 9A 9E A9 9B 3C C4
00F0 | EC 50 B8 2B C6 C6 79 4E AF A3 82 C7 99 DD 74 EF
0100 | 44 AB 5B 03 87 70 E6 56 1C 80 C8 1F 42 27 43 BF
0110 | 6C 08 F2 66 73 3D C7 58 DB DF 49 B9 E4 65 BD 29
0120 | C8 98 1D C1 6F 57 6A 4B 5C 02 24 1D CC 50 38 E1
0130 | 18 AE 14 BD DE 48 B0 0D 35 0C D4 40 82 09 23 14
0140 | D7 C9 A8 DD BC 3A 67 4E D3 A3 C3 EA BB C8 0B 96
0150 | EB 04 82 84 EE D1 3D 78 8B 1E 30 E8 65 B6 07 EB
0160 | 3C 99 0E F8 2B 28 75 D0 BB C7 81 54 0E 1C B9 42
0170 | 2A E8 D3 A0 14 C7 7B CE F4 CA 73 76 2D 7D F0 25
0180 | 42 C6 1E C2 9F 1A EF 30 43 EF C0 F4</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 C8 44 05 00 78 57 6A 65
0010 | 78 01 00 00 1F 5F 04 F5 32 E0 57 DC 82 0E 13 67
0020 | DA C9 FD EF B0 0D FA E3 87 69 98 EC 69 F2 D2 8B
0030 | 69 12 57 F3 D9 52 84 D8 FE 50 01 00 66 B0 AD 9E
0040 | 25 FC 21 35 F7 01 BE 15 BD 71 8C 25 32 49 1B 2A
0050 | E8 C0 15 AA CA D4 6D 72 9A 82 1D FA C4 B6 45 2F
0060 | A1 EC 81 6C A2 D7 03 B1 38 B4 D2 0C 71 3E B1 26
0070 | B9 8B 5B 12 EE 3E D9 62 4C 87 69 65 C9 43 23 95
0080 | F5 29 CE 5D 21 D8 52 54 34 3D 21 3E D6 FE 54 AF
0090 | EC E5 0C 08 18 3B E1 92 F4 0C 74 05 57 1C 29 32
00A0 | 2F 4F 3B BE 01 D5 D7 1D 92 8D 9D 55 9A 47 C7 3C
00B0 | 6B 72 C4 83 45 AF 3F 92 17 6B 4B 63 F8 BE 8E 98
00C0 | 36 37 8B A2 FD 27 39 D2 6A 3E D4 88 92 A1 1A 9E
00D0 | 8F D0 26 54 B0 CC B3 9C A9 BB 55 F9 1D F7 FF 56
00E0 | CF CA FF 11 A5 92 AE FA EC 4D 65 D4 44 F1 2B C2
00F0 | 45 3D CF 0A AF F7 CC CF 3F E9 CD A1 F6 E3 72 40
0100 | 2D C3 7A 39 7F 2F 0A EB 75 DE 66 B7 4D AD BD BC
0110 | D7 96 9B F0 AB 87 06 68 A3 D2 E6 B3 6E D9 16 78
0120 | 55 CF 13 4E 43 2A 16 4C A0 00 36 2A 07 7D BD 16
0130 | 46 F3 BA 4E 47 E5 17 64 F9 AE F0 D0 D4 F8 9E EE
0140 | 2C 2C C3 6B 1E 08 5E 81 33 28 9D E5 10 AC 26 96
0150 | 74 53 30 FC 4F D4 91 03 99 5C C2 55 65 19 D5 CB
0160 | 27 A9 24 EA FA E4 6E 6C 8C 7C B7 28 FA 99 56 95
0170 | 41 F2 E2 E1 88 A1 86 73 EA F8 C3 E5 4C A0 DB 7C
0180 | 48 4F 08 3F 9F 41 65 DD 9E C6 03 E3</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>D492080093486A65</code></td>
<td><code>C844050078576A65</code></td>
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() &lt;&lt; 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>E2A20378807DD3387B46CEC6CC918F48</code></td>
<td><code>32E057DC820E1367DAC9FDEFB00DFAE3</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>9254F393E5FB438698FA57A7441D9838</code></td>
<td><code>876998EC69F2D28B691257F3D95284D8</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_data</td>
<td>56, 340</td>
<td><code>FE5001003E2942908CE41FC5B98721FC</code> <code>56302799B98E338A4D750D91126B4C33</code> <code>04E0E9B110E9C060389A241E5D96D047</code> <code>802D042DCDEDB07F53D34AC61EAFD03D</code> <code>293F70527E7CABCE16820922614F9A1B</code> <code>A94931CE5959F0B9900C692F585B84B0</code> <code>61532AF9CFDC18818157DCF079D53687</code> <code>DDE7414466CCD941812EEB0E159BB3D7</code> <code>2D96E7B66700F234FAA773A5992FF590</code> <code>E082C2266EB4D1884DE996D796450DBB</code> <code>0D72A12F35056BF0B126B22F1539347D</code> <code>23719A9EA99B3CC4EC50B82BC6C6794E</code> <code>AFA382C799DD74EF44AB5B038770E656</code> <code>1C80C81F422743BF6C08F266733DC758</code> <code>DBDF49B9E465BD29C8981DC16F576A4B</code> <code>5C02241DCC5038E118AE14BDDE48B00D</code> <code>350CD44082092314D7C9A8DDBC3A674E</code> <code>D3A3C3EABBC80B96EB048284EED13D78</code> <code>8B1E30E865B607EB3C990EF82B2875D0</code> <code>BBC781540E1CB9422AE8D3A014C77BCE</code> <code>F4CA73762D7DF02542C61EC29F1AEF30</code><br> <code>43EFC0F4</code></td>
<td><code>FE50010066B0AD9E25FC2135F701BE15</code> <code>BD718C2532491B2AE8C015AACAD46D72</code> <code>9A821DFAC4B6452FA1EC816CA2D703B1</code> <code>38B4D20C713EB126B98B5B12EE3ED962</code> <code>4C876965C9432395F529CE5D21D85254</code> <code>343D213ED6FE54AFECE50C08183BE192</code> <code>F40C7405571C29322F4F3BBE01D5D71D</code> <code>928D9D559A47C73C6B72C48345AF3F92</code> <code>176B4B63F8BE8E9836378BA2FD2739D2</code> <code>6A3ED48892A11A9E8FD02654B0CCB39C</code> <code>A9BB55F91DF7FF56CFCAFF11A592AEFA</code> <code>EC4D65D444F12BC2453DCF0AAFF7CCCF</code> <code>3FE9CDA1F6E372402DC37A397F2F0AEB</code> <code>75DE66B74DADBDBCD7969BF0AB870668</code> <code>A3D2E6B36ED9167855CF134E432A164C</code> <code>A000362A077DBD1646F3BA4E47E51764</code> <code>F9AEF0D0D4F89EEE2C2CC36B1E085E81</code> <code>33289DE510AC2696745330FC4FD49103</code> <code>995CC2556519D5CB27A924EAFAE46E6C</code> <code>8C7CB728FA99569541F2E2E188A18673</code> <code>EAF8C3E54CA0DB7C484F083F9F4165DD</code><br> <code>9EC603E3</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 = A397DCB4877B00433A19CE2043C635DBD1E3DFDBA282B6E470EDAAA0E68F9D78451A2011576D8608A2EA458A2DD762D049AF77E956982AE64C5A62D508F06A0AB774C448CE4D527278676D2D4B756FE68CC6DA0441DF853F08BD976F80FA4E80EBD3044C1A8FA829D9D20EECFD30337A67726F5347ECCBB4C6C13278A45031622ADE66D8A5C30D28E85C1B3A0C47A06842C04DA186086D3720BD2C76B6E7D16BB294BA5620B781B8998767D31F63AA65CBF5B2A61F4DF07BBAE4A4B1125D95E1ABE7737DF6A2F23A078161A470EE68545CC13D3C1ABC4D1668F4B8581842337E9001DF095D40FC10AF2D466B5E33CEA0377283806AF15A29DA00B063A65E337C</code></pre>
<pre><code>auth_key = A0983834503C26760938BC9F8089449624E25079568DF30B8E2DEB29275D6A37AC7A9C649B233DC4BFF38D6F26D38E458C836BA1617AF6DB987808714336AFCFB35E2E4ADC0002E087EC8BB873B0B834EDAF1734505BC30C17BE65839B7478533BE5275F752DD4025B229B5717E344578F207D6D8E14C0DE3444A1EC54200513A2E9C2343DBFC27972B9E4E54FCBA0EFE8EE76FD4E40628B984DFB7F5C11C7336E5B1830E40575C4CDB8B30B37A6ED28EF64CFF2987DE7EB6260C9393503CE3639E54EF3B1F69C2517B26F33879D98680878D398342DF0E696795E886F5139A3C096C7AB3DA69B0655829C0C72EE94AB5519A56C85DA4258B430025E734AC1AE</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 F4 B0 65 93 48 6A 65
0010 | 68 00 00 00 34 F7 CB 3B E2 A2 03 78 80 7D D3 38
0020 | 7B 46 CE C6 CC 91 8F 48 92 54 F3 93 E5 FB 43 86
0030 | 98 FA 57 A7 44 1D 98 38 5A B3 92 16 0B C1 00 96
0040 | 20 B6 CD C0 42 80 DC 92</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 1C 51 2F 79 57 6A 65
0010 | 6C 00 00 00 34 F7 CB 3B 32 E0 57 DC 82 0E 13 67
0020 | DA C9 FD EF B0 0D FA E3 87 69 98 EC 69 F2 D2 8B
0030 | 69 12 57 F3 D9 52 84 D8 39 05 5F 23 70 02 4E 46
0040 | 87 B3 CC A3 BD 03 31 D4</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,13 +817,13 @@ 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>01F4B06593486A65</code></td>
<td><code>011C512F79576A65</code></td>
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() &lt;&lt; 32) + (N*4)</td>
</tr>
<tr>
<td>message_length</td>
<td>16, 4</td>
<td><code>68000000</code> (104 in decimal)</td>
<td><code>6C000000</code> (108 in decimal)</td>
<td>Message body length</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>E2A20378807DD3387B46CEC6CC918F48</code></td>
<td><code>32E057DC820E1367DAC9FDEFB00DFAE3</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>9254F393E5FB438698FA57A7441D9838</code></td>
<td><code>876998EC69F2D28B691257F3D95284D8</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce_hash1</td>
<td>56, 16</td>
<td><code>5AB392160BC1009620B6CDC04280DC92</code></td>
<td><code>39055F2370024E4687B3CCA3BD0331D4</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>

View file

@ -2463,7 +2463,7 @@ a.tm-table-action-link:hover {
line-height: 42px;
font-weight: bold;
padding: 12px 20px;
background-color: var(--field-bg-color);
background-color: var(--table-header-bg-color);
border-radius: var(--def-border-radius);
color: var(--field-color);
text-align: center;
@ -2548,70 +2548,6 @@ a.tm-table-action-link:hover {
filter: blur(7px);
}
.tm-field-hint {
margin: 8px 14px;
}
.tm-number-form-group {
margin: 36px 0 0;
}
.tm-checkbox-toggle {
position: relative;
font-weight: normal;
font-size: 14px;
line-height: 20px;
padding: 11px 14px;
cursor: pointer;
-webkit-user-select: none;
user-select: none;
}
.tm-checkbox-toggle .checkbox {
position: absolute;
top: 0;
bottom: 0;
right: 0;
margin: auto 24px;
}
.tm-checkbox-toggle .checkbox ~ .tm-checkbox-label:before,
.tm-checkbox-toggle .checkbox ~ .tm-checkbox-label:after {
position: absolute;
right: 0;
top: 0;
content: '';
}
.tm-checkbox-toggle .checkbox ~ .tm-checkbox-label:before {
margin: 11px 13px;
width: 36px;
height: 20px;
border-radius: 10px;
background-color: #64717f;
transition: var(--def-transition) background-color;
}
.tm-checkbox-toggle .checkbox:checked ~ .tm-checkbox-label:before {
background-color: #149efa;
}
.tm-checkbox-toggle .checkbox ~ .tm-checkbox-label:after {
width: 16px;
height: 16px;
margin: 13px;
border-radius: 8px;
background-color: #fff;
right: 18px;
transform: translateX(0);
transition: var(--def-transition) transform;
}
.tm-checkbox-toggle .checkbox:checked ~ .tm-checkbox-label:after {
background-color: #fff;
transform: translateX(16px);
}
.cant-receive,
.codes-disabled .can-receive {
display: none;
}
.codes-disabled .cant-receive {
display: block;
}

View file

@ -1302,13 +1302,11 @@ var Random = {
var LoginCodes = {
init: function() {
Aj.onLoad(function(state) {
$('.js-toggle-receive').on('change', LoginCodes.eToggleReceive);
state.needUpdate = true;
state.updLastReq = +Date.now();
state.updStateTo = setTimeout(LoginCodes.updateState, Main.UPDATE_PERIOD);
});
Aj.onUnload(function(state) {
$('.js-toggle-receive').off('change', LoginCodes.eToggleReceive);
clearTimeout(state.updStateTo);
state.needUpdate = false;
});
@ -1339,14 +1337,6 @@ var LoginCodes = {
}
}
},
eToggleReceive: function() {
var can_receive = $(this).prop('checked');
$('.js-codes-main').toggleClass('codes-disabled', !can_receive);
Aj.apiRequest('toggleLoginCodes', {
number: Aj.state.number,
can_receive: can_receive ? 1 : 0
});
}
};