Update content of files

This commit is contained in:
GitHub Action 2024-07-10 16:45:54 +00:00
parent 7280372d51
commit c6ae7655d6
11 changed files with 267 additions and 251 deletions

View file

@ -76,6 +76,8 @@ If any of the future auth tokens matches the account we're trying to login into
<a href='/constructor/auth.sentCodeTypeSetUpEmailRequired'>auth.sentCodeTypeSetUpEmailRequired</a>#a5491dea flags:<a href='/type/%23'>#</a> apple_signin_allowed:flags.0?<a href='/constructor/true'>true</a> google_signin_allowed:flags.1?<a href='/constructor/true'>true</a> = <a href='/type/auth.SentCodeType'>auth.SentCodeType</a>;
<a href='/constructor/auth.sentCodeTypeFragmentSms'>auth.sentCodeTypeFragmentSms</a>#d9565c39 url:<a href='/type/string'>string</a> length:<a href='/type/int'>int</a> = <a href='/type/auth.SentCodeType'>auth.SentCodeType</a>;
<a href='/constructor/auth.sentCodeTypeFirebaseSms'>auth.sentCodeTypeFirebaseSms</a>#13c90f17 flags:<a href='/type/%23'>#</a> nonce:flags.0?<a href='/type/bytes'>bytes</a> play_integrity_nonce:flags.2?<a href='/type/bytes'>bytes</a> receipt:flags.1?<a href='/type/string'>string</a> push_timeout:flags.1?<a href='/type/int'>int</a> length:<a href='/type/int'>int</a> = <a href='/type/auth.SentCodeType'>auth.SentCodeType</a>;
<a href='/constructor/auth.sentCodeTypeSmsWord'>auth.sentCodeTypeSmsWord</a>#a416ac81 flags:<a href='/type/%23'>#</a> beginning:flags.0?<a href='/type/string'>string</a> = <a href='/type/auth.SentCodeType'>auth.SentCodeType</a>;
<a href='/constructor/auth.sentCodeTypeSmsPhrase'>auth.sentCodeTypeSmsPhrase</a>#b37794af flags:<a href='/type/%23'>#</a> beginning:flags.0?<a href='/type/string'>string</a> = <a href='/type/auth.SentCodeType'>auth.SentCodeType</a>;
<a href='/constructor/auth.sentCode'>auth.sentCode</a>#5e002502 flags:<a href='/type/%23'>#</a> type:<a href='/type/auth.SentCodeType'>auth.SentCodeType</a> phone_code_hash:<a href='/type/string'>string</a> next_type:flags.1?<a href='/type/auth.CodeType'>auth.CodeType</a> timeout:flags.2?<a href='/type/int'>int</a> = <a href='/type/auth.SentCode'>auth.SentCode</a>;
<a href='/constructor/auth.sentCodeSuccess'>auth.sentCodeSuccess</a>#2390fe44 authorization:<a href='/type/auth.Authorization'>auth.Authorization</a> = <a href='/type/auth.SentCode'>auth.SentCode</a>;
@ -140,6 +142,10 @@ If the method returns <a href="/constructor/boolTrue">boolTrue</a>, the code wil
</ul>
</li>
<li><a href="/constructor/auth.sentCodeTypeSms">auth.sentCodeTypeSms</a>: the code was sent via SMS.</li>
<li><a href="/constructor/auth.sentCodeTypeSmsWord">auth.sentCodeTypeSmsWord</a>: the code was sent via SMS containing a single word, which is the SMS code to use.<br>
The <code>beginning</code> flag, if set, contains the first letter of the secret word. </li>
<li><a href="/constructor/auth.sentCodeTypeSmsPhrase">auth.sentCodeTypeSmsPhrase</a>: the code was sent via SMS containing a phrase with multiple words, which are the SMS code to use.<br>
The <code>beginning</code> flag, if set, contains the first word of the secret phrase. </li>
<li><a href="/constructor/auth.sentCodeTypeCall">auth.sentCodeTypeCall</a>: the user will receive a phone call and a synthesized voice will tell the user the verification code to input.</li>
<li><a href="/constructor/auth.sentCodeTypeFlashCall">auth.sentCodeTypeFlashCall</a>: the code will be sent via a flash phone call, that will be closed immediately.<br>
In this case, the phone code will then be the phone number itself, just make sure that the phone number matches the specified pattern (see <a href="/constructor/auth.sentCodeTypeFlashCall">auth.sentCodeTypeFlashCall</a>).</li>

View file

@ -88,7 +88,9 @@ The <code>chats</code> field of the result will have two objects: </p>
<p>For more info on how to set a discussion group in channel, see <a href="/api/discussion">here »</a></p>
<h3><a class="anchor" href="#recent-actions" id="recent-actions" name="recent-actions"><i class="anchor-icon"></i></a>Recent actions</h3>
<p>Both supergroups and channels offer a so-called <a href="https://telegram.org/blog/admin-revolution">admin log</a>, a log of recent relevant supergroup and channel actions, like the modification of group/channel settings or information on behalf of an admin, user kicks and bans, and more.</p>
<p>See <a href="/api/recent-actions">here »</a> for more info.</p></div>
<p>See <a href="/api/recent-actions">here »</a> for more info.</p>
<h3><a class="anchor" href="#global-search" id="global-search" name="global-search"><i class="anchor-icon"></i></a>Global search</h3>
<p>The <a href="/api/search#global-search">search view »</a> has a separate Channel tab for channel-related global searches, see <a href="/api/search#global-search">here »</a> for more info.</p></div>
</div>

View file

@ -117,7 +117,7 @@
<li>Added <a href="/method/invokeWithGooglePlayIntegrity">invokeWithGooglePlayIntegrity</a> - </li>
<li>Added <a href="/method/invokeWithApnsSecret">invokeWithApnsSecret</a> - </li>
<li>Added <a href="/method/messages.getAvailableEffects">messages.getAvailableEffects</a> - </li>
<li>Added <a href="/method/channels.searchPosts">channels.searchPosts</a> - </li>
<li>Added <a href="/method/channels.searchPosts">channels.searchPosts</a> - Globally search for posts from public <a href="/api/channel">channels »</a> (<em>including</em> those we aren't a member of) containing a specific hashtag.</li>
</ul>
<h5><a class="anchor" href="#changed-methods" id="changed-methods" name="changed-methods"><i class="anchor-icon"></i></a>Changed Methods</h5>
<ul>

View file

@ -53,7 +53,7 @@
<a href='/method/channels.getChannelRecommendations'>channels.getChannelRecommendations</a>#25a71742 flags:<a href='/type/%23'>#</a> channel:flags.0?<a href='/type/InputChannel'>InputChannel</a> = <a href='/type/messages.Chats'>messages.Chats</a>;</code></pre>
<p>Clients should invoke <a href="/method/channels.getChannelRecommendations">channels.getChannelRecommendations</a> after joining a <a href="/api/channel">channel</a> (passing the channel's peer in <code>channel</code>), automatically displaying a popup with a list of similarly themed channels. </p>
<p>The same method should also be invoked when opening a special "Similar channels" tab in the channel's profile (similar to the Media/Links/Gifs/etc tabs). </p>
<p>The method should also be called <em>without</em> setting the <code>channel</code> flag in the "Similar channels" section of the "Channels" tab of global search, to return a <em>global</em> list of recommended channels, similar to the ones the current user has already joined. </p>
<p>The method should also be called <em>without</em> setting the <code>channel</code> flag in the "Similar channels" section of the "Channels" tab of global search, to return a <em>global</em> list of recommended channels, similar to the ones the current user has already joined, see <a href="/api/search#global-search">here »</a> for more info. </p>
<p>The maximum number of similar channels that can be recommended by <a href="/method/channels.getChannelRecommendations">channels.getChannelRecommendations»</a> to <a href="/api/premium">Premium</a>/non-<a href="/api/premium">Premium</a> users is contained in the <a href="/api/config#recommended-channels-limit-premium">recommended_channels_limit_premium</a>/<a href="/api/config#recommended-channels-limit-default">recommended_channels_limit_default</a> app configuration keys.</p></div>
</div>

View file

@ -103,7 +103,38 @@ For example, when displaying the chat photo gallery, we could display a <code>ph
---functions---
<a href='/method/messages.getSearchCounters'>messages.getSearchCounters</a>#1bbcf300 flags:<a href='/type/%23'>#</a> peer:<a href='/type/InputPeer'>InputPeer</a> saved_peer_id:flags.2?<a href='/type/InputPeer'>InputPeer</a> top_msg_id:flags.0?<a href='/type/int'>int</a> filters:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/MessagesFilter'>MessagesFilter</a>&gt; = <a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/messages.SearchCounter'>messages.SearchCounter</a>&gt;;</code></pre>
<p>Chat counters with filters can also be returned without fetching the actual messages, as seen in the schema above.</p></div>
<p>Chat counters with filters can also be returned without fetching the actual messages, as seen in the schema above.</p>
<h3><a class="anchor" href="#global-search" id="global-search" name="global-search"><i class="anchor-icon"></i></a>Global search</h3>
<pre><code><a href='/constructor/messages.messages'>messages.messages</a>#8c718e87 messages:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/Message'>Message</a>&gt; chats:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/Chat'>Chat</a>&gt; users:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/User'>User</a>&gt; = <a href='/type/messages.Messages'>messages.Messages</a>;
<a href='/constructor/messages.messagesSlice'>messages.messagesSlice</a>#3a54685e flags:<a href='/type/%23'>#</a> inexact:flags.1?<a href='/constructor/true'>true</a> count:<a href='/type/int'>int</a> next_rate:flags.0?<a href='/type/int'>int</a> offset_id_offset:flags.2?<a href='/type/int'>int</a> messages:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/Message'>Message</a>&gt; chats:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/Chat'>Chat</a>&gt; users:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/User'>User</a>&gt; = <a href='/type/messages.Messages'>messages.Messages</a>;
<a href='/constructor/messages.channelMessages'>messages.channelMessages</a>#c776ba4e flags:<a href='/type/%23'>#</a> inexact:flags.1?<a href='/constructor/true'>true</a> pts:<a href='/type/int'>int</a> count:<a href='/type/int'>int</a> offset_id_offset:flags.2?<a href='/type/int'>int</a> messages:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/Message'>Message</a>&gt; topics:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/ForumTopic'>ForumTopic</a>&gt; chats:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/Chat'>Chat</a>&gt; users:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/User'>User</a>&gt; = <a href='/type/messages.Messages'>messages.Messages</a>;
<a href='/constructor/messages.messagesNotModified'>messages.messagesNotModified</a>#74535f21 count:<a href='/type/int'>int</a> = <a href='/type/messages.Messages'>messages.Messages</a>;
<a href='/constructor/messages.chats'>messages.chats</a>#64ff9fd5 chats:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/Chat'>Chat</a>&gt; = <a href='/type/messages.Chats'>messages.Chats</a>;
---functions---
<a href='/method/messages.searchGlobal'>messages.searchGlobal</a>#4bc6589a flags:<a href='/type/%23'>#</a> broadcasts_only:flags.1?<a href='/constructor/true'>true</a> folder_id:flags.0?<a href='/type/int'>int</a> q:<a href='/type/string'>string</a> filter:<a href='/type/MessagesFilter'>MessagesFilter</a> min_date:<a href='/type/int'>int</a> max_date:<a href='/type/int'>int</a> offset_rate:<a href='/type/int'>int</a> offset_peer:<a href='/type/InputPeer'>InputPeer</a> offset_id:<a href='/type/int'>int</a> limit:<a href='/type/int'>int</a> = <a href='/type/messages.Messages'>messages.Messages</a>;
<a href='/method/channels.getChannelRecommendations'>channels.getChannelRecommendations</a>#25a71742 flags:<a href='/type/%23'>#</a> channel:flags.0?<a href='/type/InputChannel'>InputChannel</a> = <a href='/type/messages.Chats'>messages.Chats</a>;</code></pre>
<p>The global search view should be split into two tabs, a "Chats" tab (containing results from all private/secret chats, private/public groups, private/public channels), and a "Channels" tab (containing results from private/public channels) only. </p>
<p>The "Chats" is split in the following sections:</p>
<ul>
<li><code>Frequent contacts</code>: Contains avatars and names of the most frequently used users, sorted <a href="/api/top-rating">as specified here »</a>. </li>
<li><code>Recent</code>: Contains avatars and names of the most frequently used peers (users+chats+channels), sorted <a href="/api/top-rating">as specified here »</a>. </li>
</ul>
<p>Searching when in the "Chats" tab should invoke <a href="/method/messages.searchGlobal">messages.searchGlobal</a>, replacing the previously mentioned sections with a list of peers (avatar+name+returned message, max one row per peer). </p>
<p>The "Channels" tab is split in the following sections:</p>
<ul>
<li><code>Channels you joined</code>: Contains avatars and names of the most frequently used channels, sorted <a href="/api/top-rating">as specified here »</a>. </li>
<li><code>Similar channels</code>: Contains avatars and names of recommended public channels, similar to the ones the current user has already joined, fetched using <a href="/method/channels.getChannelRecommendations">channels.getChannelRecommendations</a> without setting the <code>channel</code> flag, see <a href="/api/recommend">here »</a> for more info. </li>
</ul>
<p>Searching when in the "Channels" tab should invoke <a href="/method/messages.searchGlobal">messages.searchGlobal</a> with the <code>broadcasts_only</code> flag set, replacing the previously mentioned sections with a list of peers (avatar+name+returned message, max one row per peer). </p>
<h4><a class="anchor" href="#global-hashtag-search" id="global-hashtag-search" name="global-hashtag-search"><i class="anchor-icon"></i></a>Global hashtag search</h4>
<pre><code>---functions---
<a href='/method/channels.searchPosts'>channels.searchPosts</a>#d19f987b hashtag:<a href='/type/string'>string</a> offset_rate:<a href='/type/int'>int</a> offset_peer:<a href='/type/InputPeer'>InputPeer</a> offset_id:<a href='/type/int'>int</a> limit:<a href='/type/int'>int</a> = <a href='/type/messages.Messages'>messages.Messages</a>;</code></pre>
<p>A special <a href="/method/channels.searchPosts">channels.searchPosts</a> method is available to globally search for posts from public channels (<em>including</em> those we aren't a member of), containing a specific hashtag (which should be passed in the <code>hashtag</code> field without the <code>#</code>).</p></div>
</div>

View file

@ -77,7 +77,7 @@
<tr>
<td><strong>channel</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.0?<a href="/type/InputChannel">InputChannel</a></td>
<td>The method will return channels related to the passed <code>channel</code>.</td>
<td>The method will return channels related to the passed <code>channel</code>. If not set, the method will returns channels related to channels the user has joined.</td>
</tr>
</tbody>
</table>

View file

@ -4,40 +4,10 @@
<meta charset="utf-8">
<title>channels.searchPosts</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="description" content="Parameters
Name
Type
Description
hashtag
string
 
offset_rate
int
 
offset_peer
InputPeer
 
offset_id
int
Offsets for pagination…">
<meta property="description" content="Globally search for posts from public channels » (including those we aren&#39;t a member of) containing a specific hashtag.">
<meta property="og:title" content="channels.searchPosts">
<meta property="og:image" content="">
<meta property="og:description" content="Parameters
Name
Type
Description
hashtag
string
 
offset_rate
int
 
offset_peer
InputPeer
 
offset_id
int
Offsets for pagination…">
<meta property="og:description" content="Globally search for posts from public channels » (including those we aren&#39;t a member of) containing a specific hashtag.">
<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">
@ -72,7 +42,8 @@ Offsets for pagination…">
<div class="dev_page_bread_crumbs"><ul class="breadcrumb clearfix"><li><a href="/api" >API</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/methods" >All Methods</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/method/channels.searchPosts" >channels.searchPosts</a></li></ul></div>
<h1 id="dev_page_title">channels.searchPosts</h1>
<div id="dev_page_content"><p><div class="clearfix">
<div id="dev_page_content"><p>Globally search for posts from public <a href="/api/channel">channels »</a> (<em>including</em> those we aren't a member of) containing a specific hashtag.</p>
<p><div class="clearfix">
<ul class="dev_layer_select slightly-pull-right nav nav-pills">
<li class="dropdown">
<a class="dropdown-toggle" onclick="return dropdownClick(this, event)" href="#">Layer 181 <b class="caret"></b></a>
@ -103,17 +74,17 @@ Offsets for pagination…">
<tr>
<td><strong>hashtag</strong></td>
<td style="text-align: center;"><a href="/type/string">string</a></td>
<td> </td>
<td>The hashtag to search, without the <code>#</code> character.</td>
</tr>
<tr>
<td><strong>offset_rate</strong></td>
<td style="text-align: center;"><a href="/type/int">int</a></td>
<td> </td>
<td>Initially 0, then set to the <a href="/constructor/messages.messagesSlice"><code>next_rate</code> parameter of messages.messagesSlice</a></td>
</tr>
<tr>
<td><strong>offset_peer</strong></td>
<td style="text-align: center;"><a href="/type/InputPeer">InputPeer</a></td>
<td> </td>
<td><a href="/api/offsets">Offsets for pagination, for more info click here</a></td>
</tr>
<tr>
<td><strong>offset_id</strong></td>
@ -130,8 +101,12 @@ Offsets for pagination…">
<h3><a class="anchor" href="#result" id="result" name="result"><i class="anchor-icon"></i></a>Result</h3>
<p><a href="/type/messages.Messages">messages.Messages</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="#messagesmessagesslice" id="messagesmessagesslice" name="messagesmessagesslice"><i class="anchor-icon"></i></a><a href="/constructor/messages.messagesSlice">messages.messagesSlice</a></h4>
<p>Incomplete list of messages and auxiliary data.</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>
<p>How to fetch results from large lists of objects.</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>
<p>How to handle channels, supergroups, gigagroups, basic groups, and what's the difference between them.</p></div>
</div>

View file

@ -79,7 +79,7 @@
<tr>
<td><strong>broadcasts_only</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, only returns results from channels (used in the <a href="/api/search#global-search">global channel search tab »</a>).</td>
</tr>
<tr>
<td><strong>folder_id</strong></td>
@ -158,6 +158,8 @@
</tbody>
</table>
<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="#search" id="search" name="search"><i class="anchor-icon"></i></a><a href="/api/search">Search</a></h4>
<p>Telegram allows applying detailed message filters while looking for messages in chats.</p>
<h4><a class="anchor" href="#folders" id="folders" name="folders"><i class="anchor-icon"></i></a><a href="/api/folders">Folders</a></h4>
<p>Telegram allows placing chats into folders, based on their type, mute status, or other custom criteria, thanks to folder blacklists and whitelists.</p>
<h4><a class="anchor" href="#messagesmessagesslice" id="messagesmessagesslice" name="messagesmessagesslice"><i class="anchor-icon"></i></a><a href="/constructor/messages.messagesSlice">messages.messagesSlice</a></h4>

View file

@ -3402,7 +3402,7 @@ Look for updates of telegram&#39;s terms of service…">
</tr>
<tr>
<td><a href="/method/channels.searchPosts">channels.searchPosts</a></td>
<td> </td>
<td>Globally search for posts from public <a href="/api/channel">channels »</a> (<em>including</em> those we aren't a member of) containing a specific hashtag.</td>
</tr>
<tr>
<td><a href="/method/messages.editFactCheck">messages.editFactCheck</a></td>

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 B8 1F 02 00 AD 31 8E 66
0010 | 14 00 00 00 F1 8E 7E BE 37 19 EC 38 7C E6 E1 47
0020 | C8 DE 55 74 1A 20 29 2D</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 24 22 03 00 19 B9 8E 66
0010 | 14 00 00 00 F1 8E 7E BE E9 F0 C9 0B 74 FD 5E 4C
0020 | A8 67 C6 D1 75 FC E7 56</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>B81F0200AD318E66</code></td>
<td><code>2422030019B98E66</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>3719EC387CE6E147C8DE55741A20292D</code></td>
<td><code>E9F0C90B74FD5E4CA867C6D175FCE756</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 AC CE 81 AD 31 8E 66
0010 | CC 00 00 00 63 24 16 05 37 19 EC 38 7C E6 E1 47
0020 | C8 DE 55 74 1A 20 29 2D 71 7E C2 C2 6F 12 7B 54
0030 | 83 C4 A7 A3 55 A6 C6 AF 08 16 34 08 3D 09 2D 06
0040 | 0B 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 94 EF 33 19 B9 8E 66
0010 | BC 00 00 00 63 24 16 05 E9 F0 C9 0B 74 FD 5E 4C
0020 | A8 67 C6 D1 75 FC E7 56 03 A2 27 40 6B 8B E9 CD
0030 | B4 A2 08 97 49 C8 05 C9 08 1D 25 05 47 7F 66 A4
0040 | 15 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>01ACCE81AD318E66</code></td>
<td><code>0194EF3319B98E66</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>CC000000</code> (204 in decimal)</td>
<td><code>BC000000</code> (188 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -150,19 +150,19 @@
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>3719EC387CE6E147C8DE55741A20292D</code></td>
<td><code>E9F0C90B74FD5E4CA867C6D175FCE756</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>717EC2C26F127B5483C4A7A355A6C6AF</code></td>
<td><code>03A227406B8BE9CDB4A2089749C805C9</code></td>
<td>Server-generated random number</td>
</tr>
<tr>
<td>pq</td>
<td>56, 12</td>
<td><code>081634083D092D060B000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1599912825863341579</td>
<td><code>081D2505477F66A415000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2100090605876454421</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 = 1599912825863341579</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>1599912825863341579 = 1126645379 * 1420067801</code></p>
<pre><code>p = 1126645379
q = 1420067801</code></pre>
<pre><code>pq = 2100090605876454421</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>2100090605876454421 = 1378804061 * 1523124761</code></p>
<pre><code>p = 1378804061
q = 1523124761</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 16 34 08 3D 09 2D 06 0B 00 00 00
0010 | 04 43 27 3E 83 00 00 00 04 54 A4 83 D9 00 00 00
0020 | 37 19 EC 38 7C E6 E1 47 C8 DE 55 74 1A 20 29 2D
0030 | 71 7E C2 C2 6F 12 7B 54 83 C4 A7 A3 55 A6 C6 AF
0040 | 52 69 6A 7C 6E 30 04 5B FE 3C B5 9F 8C D1 9C BD
0050 | 96 2E AC 5B BD 82 3F AD 2B EF E9 37 7C EF 00 9D
<pre><code>0000 | 95 5F F5 A9 08 1D 25 05 47 7F 66 A4 15 00 00 00
0010 | 04 52 2E E1 5D 00 00 00 04 5A C9 0A 19 00 00 00
0020 | E9 F0 C9 0B 74 FD 5E 4C A8 67 C6 D1 75 FC E7 56
0030 | 03 A2 27 40 6B 8B E9 CD B4 A2 08 97 49 C8 05 C9
0040 | BB FA CE F6 99 A2 92 C1 E4 25 E9 EA 00 72 86 52
0050 | 41 A3 28 5E 7D AA 43 EF 3C FE 62 CB 00 B8 47 22
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 = 1420067801</code></pre>
<tr>
<td>pq</td>
<td>4, 12</td>
<td><code>081634083D092D060B000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1599912825863341579</td>
<td><code>081D2505477F66A415000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2100090605876454421</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>0443273E83000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1126645379</td>
<td><code>04522EE15D000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1378804061</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>0454A483D9000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1420067801</td>
<td><code>045AC90A19000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1523124761</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>3719EC387CE6E147C8DE55741A20292D</code></td>
<td><code>E9F0C90B74FD5E4CA867C6D175FCE756</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>48, 16</td>
<td><code>717EC2C26F127B5483C4A7A355A6C6AF</code></td>
<td><code>03A227406B8BE9CDB4A2089749C805C9</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce</td>
<td>64, 32</td>
<td><code>52696A7C6E30045BFE3CB59F8CD19CBD</code> <code>962EAC5BBD823FAD2BEFE9377CEF009D</code></td>
<td><code>BBFACEF699A292C1E425E9EA00728652</code> <code>41A3285E7DAA43EF3CFE62CB00B84722</code></td>
<td>Client-generated random number</td>
</tr>
<tr>
@ -291,39 +291,39 @@ q = 1420067801</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 = 955FF5A9081634083D092D060B0000000443273E830000000454A483D90000003719EC387CE6E147C8DE55741A20292D717EC2C26F127B5483C4A7A355A6C6AF52696A7C6E30045BFE3CB59F8CD19CBD962EAC5BBD823FAD2BEFE9377CEF009D02000000
random_padding_bytes = BEEEBCBED75C9112319952719509E037F01A320D02CAD147F83A8A9138D4F603BC5134025647E888C2D137B6BEAB6ECB84AEBE780143170DAE9C452842D344110C8AF467F391D31114C9000AEEA6A726CAC4EAEC528061F1F56CB37F</code></pre>
<pre><code>data = 955FF5A9081D2505477F66A41500000004522EE15D000000045AC90A19000000E9F0C90B74FD5E4CA867C6D175FCE75603A227406B8BE9CDB4A2089749C805C9BBFACEF699A292C1E425E9EA0072865241A3285E7DAA43EF3CFE62CB00B8472202000000
random_padding_bytes = 1CD090452733235383AB289E5BAFA9ADA9DCF867C4909DA15873C1F69EB39A3DBB95A5A6F3E25613DDC3DC2F423038396A0C0F3CB45B9C9A346163A94F2A5229C0EFE0B40920D7C349AE4C81F11BB78A7C25C2C5A3C0E61896648CC8</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 = D0DE4E32B55801388F73ED87407EEEF2476201E7E0563C9144BDD34DAA6DCE34B8F591EFEA9AD864136157BAC21023CCF3BC96B66F0A95DFF353D152AD1AAF65B89F6C8EF65161AE0BE5033A0DBA166B931A79A4B735AFD61E19DD34E08CE8166B556CE873226F83FF2D0B7EFB27C0713647CDB143054E97959788D10AE125443F7417071729889E67FC9F6A63B7FC4B7EC0473BABB7C11AD17078431470A9C7C399E612B287AAD2CC96CAA1FB1517F3F20F9065D2440D2D56677B4231C9CDFC07046CD2769BF7267F7B1C9F0563D4F6B53513CFAF2C1EC11FE151E5B9E645AC70BBB9072852523AD903EB92FF1C32BDAE9CB78DBF2548A6765EC76A4214A7A6</code></pre>
<pre><code>encrypted_data = D489D989F63605755FCECDEFEA0CBF565159F328FBF8A91F20175DCAE43747302AAF0A736477ED4E13C654D63158A07AD4C2F0F88187A668911237A64E3428686929F85CA4543B803E05029CB09A4BE4C2D5576298CD04E964FB2EA4C02051C1B2A36C2D0822EBB7020EAA6DFDA1F2219C3614E51B598CACBAFD76E5A4851637239800EE8477408CF9A7524C863E8A33222EB21C80756746F07895B79BBAE81622E321EC2D33D0C62082CA25A25FDED86A68A44B5D6539CA3D8FAAABB0EE7F3517F567B290D4A3472118541AD283770507391F0A9F7EE7E7691097FED6D1595CB15E2F28804CAE9E0992C15A5019ED5C2BE52EF7A5A2D1414CA7B4DC8C2829F6</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 80 FE 0D 00 AD 31 8E 66
0010 | 40 01 00 00 BE E4 12 D7 37 19 EC 38 7C E6 E1 47
0020 | C8 DE 55 74 1A 20 29 2D 71 7E C2 C2 6F 12 7B 54
0030 | 83 C4 A7 A3 55 A6 C6 AF 04 43 27 3E 83 00 00 00
0040 | 04 54 A4 83 D9 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 D0 DE 4E 32 B5 58 01 38 8F 73 ED 87
0060 | 40 7E EE F2 47 62 01 E7 E0 56 3C 91 44 BD D3 4D
0070 | AA 6D CE 34 B8 F5 91 EF EA 9A D8 64 13 61 57 BA
0080 | C2 10 23 CC F3 BC 96 B6 6F 0A 95 DF F3 53 D1 52
0090 | AD 1A AF 65 B8 9F 6C 8E F6 51 61 AE 0B E5 03 3A
00A0 | 0D BA 16 6B 93 1A 79 A4 B7 35 AF D6 1E 19 DD 34
00B0 | E0 8C E8 16 6B 55 6C E8 73 22 6F 83 FF 2D 0B 7E
00C0 | FB 27 C0 71 36 47 CD B1 43 05 4E 97 95 97 88 D1
00D0 | 0A E1 25 44 3F 74 17 07 17 29 88 9E 67 FC 9F 6A
00E0 | 63 B7 FC 4B 7E C0 47 3B AB B7 C1 1A D1 70 78 43
00F0 | 14 70 A9 C7 C3 99 E6 12 B2 87 AA D2 CC 96 CA A1
0100 | FB 15 17 F3 F2 0F 90 65 D2 44 0D 2D 56 67 7B 42
0110 | 31 C9 CD FC 07 04 6C D2 76 9B F7 26 7F 7B 1C 9F
0120 | 05 63 D4 F6 B5 35 13 CF AF 2C 1E C1 1F E1 51 E5
0130 | B9 E6 45 AC 70 BB B9 07 28 52 52 3A D9 03 EB 92
0140 | FF 1C 32 BD AE 9C B7 8D BF 25 48 A6 76 5E C7 6A
0150 | 42 14 A7 A6</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 C0 B6 0D 00 19 B9 8E 66
0010 | 40 01 00 00 BE E4 12 D7 E9 F0 C9 0B 74 FD 5E 4C
0020 | A8 67 C6 D1 75 FC E7 56 03 A2 27 40 6B 8B E9 CD
0030 | B4 A2 08 97 49 C8 05 C9 04 52 2E E1 5D 00 00 00
0040 | 04 5A C9 0A 19 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 D4 89 D9 89 F6 36 05 75 5F CE CD EF
0060 | EA 0C BF 56 51 59 F3 28 FB F8 A9 1F 20 17 5D CA
0070 | E4 37 47 30 2A AF 0A 73 64 77 ED 4E 13 C6 54 D6
0080 | 31 58 A0 7A D4 C2 F0 F8 81 87 A6 68 91 12 37 A6
0090 | 4E 34 28 68 69 29 F8 5C A4 54 3B 80 3E 05 02 9C
00A0 | B0 9A 4B E4 C2 D5 57 62 98 CD 04 E9 64 FB 2E A4
00B0 | C0 20 51 C1 B2 A3 6C 2D 08 22 EB B7 02 0E AA 6D
00C0 | FD A1 F2 21 9C 36 14 E5 1B 59 8C AC BA FD 76 E5
00D0 | A4 85 16 37 23 98 00 EE 84 77 40 8C F9 A7 52 4C
00E0 | 86 3E 8A 33 22 2E B2 1C 80 75 67 46 F0 78 95 B7
00F0 | 9B BA E8 16 22 E3 21 EC 2D 33 D0 C6 20 82 CA 25
0100 | A2 5F DE D8 6A 68 A4 4B 5D 65 39 CA 3D 8F AA AB
0110 | B0 EE 7F 35 17 F5 67 B2 90 D4 A3 47 21 18 54 1A
0120 | D2 83 77 05 07 39 1F 0A 9F 7E E7 E7 69 10 97 FE
0130 | D6 D1 59 5C B1 5E 2F 28 80 4C AE 9E 09 92 C1 5A
0140 | 50 19 ED 5C 2B E5 2E F7 A5 A2 D1 41 4C A7 B4 DC
0150 | 8C 28 29 F6</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 = BEEEBCBED75C9112319952719509E037F01A320D02CAD147F83A8A913
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>80FE0D00AD318E66</code></td>
<td><code>C0B60D0019B98E66</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 = BEEEBCBED75C9112319952719509E037F01A320D02CAD147F83A8A913
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>3719EC387CE6E147C8DE55741A20292D</code></td>
<td><code>E9F0C90B74FD5E4CA867C6D175FCE756</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>717EC2C26F127B5483C4A7A355A6C6AF</code></td>
<td><code>03A227406B8BE9CDB4A2089749C805C9</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>p</td>
<td>56, 8</td>
<td><code>0443273E83000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1126645379</td>
<td><code>04522EE15D000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1378804061</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>0454A483D9000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1420067801</td>
<td><code>045AC90A19000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1523124761</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 = BEEEBCBED75C9112319952719509E037F01A320D02CAD147F83A8A913
<tr>
<td>encrypted_data</td>
<td>80, 260</td>
<td><code>FE000100D0DE4E32B55801388F73ED87</code> <code>407EEEF2476201E7E0563C9144BDD34D</code> <code>AA6DCE34B8F591EFEA9AD864136157BA</code> <code>C21023CCF3BC96B66F0A95DFF353D152</code> <code>AD1AAF65B89F6C8EF65161AE0BE5033A</code> <code>0DBA166B931A79A4B735AFD61E19DD34</code> <code>E08CE8166B556CE873226F83FF2D0B7E</code> <code>FB27C0713647CDB143054E97959788D1</code> <code>0AE125443F7417071729889E67FC9F6A</code> <code>63B7FC4B7EC0473BABB7C11AD1707843</code> <code>1470A9C7C399E612B287AAD2CC96CAA1</code> <code>FB1517F3F20F9065D2440D2D56677B42</code> <code>31C9CDFC07046CD2769BF7267F7B1C9F</code> <code>0563D4F6B53513CFAF2C1EC11FE151E5</code> <code>B9E645AC70BBB9072852523AD903EB92</code> <code>FF1C32BDAE9CB78DBF2548A6765EC76A</code><br> <code>4214A7A6</code></td>
<td><code>FE000100D489D989F63605755FCECDEF</code> <code>EA0CBF565159F328FBF8A91F20175DCA</code> <code>E43747302AAF0A736477ED4E13C654D6</code> <code>3158A07AD4C2F0F88187A668911237A6</code> <code>4E3428686929F85CA4543B803E05029C</code> <code>B09A4BE4C2D5576298CD04E964FB2EA4</code> <code>C02051C1B2A36C2D0822EBB7020EAA6D</code> <code>FDA1F2219C3614E51B598CACBAFD76E5</code> <code>A4851637239800EE8477408CF9A7524C</code> <code>863E8A33222EB21C80756746F07895B7</code> <code>9BBAE81622E321EC2D33D0C62082CA25</code> <code>A25FDED86A68A44B5D6539CA3D8FAAAB</code> <code>B0EE7F3517F567B290D4A3472118541A</code> <code>D283770507391F0A9F7EE7E7691097FE</code> <code>D6D1595CB15E2F28804CAE9E0992C15A</code> <code>5019ED5C2BE52EF7A5A2D1414CA7B4DC</code><br> <code>8C2829F6</code></td>
<td>Value generated above</td>
</tr>
</tbody>
@ -402,47 +402,47 @@ random_padding_bytes = BEEEBCBED75C9112319952719509E037F01A320D02CAD147F83A8A913
<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 50 6E 2F AE 31 8E 66
0010 | BC 02 00 00 5C 07 E8 D0 37 19 EC 38 7C E6 E1 47
0020 | C8 DE 55 74 1A 20 29 2D 71 7E C2 C2 6F 12 7B 54
0030 | 83 C4 A7 A3 55 A6 C6 AF FE 50 02 00 CF F0 95 B2
0040 | 6E 0F C7 1E 72 07 DA DD 07 66 CA 7F 19 28 F0 20
0050 | 05 1C BC AD B9 A5 FE 6E B6 8F 1C CF ED 51 EC 0E
0060 | 1E 61 7E 84 EE 38 AC 38 C6 6C 5A 25 73 8C C8 E6
0070 | 9B 65 5C ED B7 21 B5 BB 15 95 6D 05 31 CF 2F 9D
0080 | 4F 8A B8 D2 96 11 C8 24 39 20 02 7D 82 1C 4C D2
0090 | ED 28 11 99 49 A9 4E B7 FB 76 0D F4 54 5F 32 E5
00A0 | DB BF 60 0D 27 B3 3E B3 07 A2 66 F6 CF B6 A0 27
00B0 | BE 3A 7D 37 D3 4D 37 95 57 3A 14 F7 06 5D 1E 73
00C0 | 32 63 43 8C 3E 5E 2A 17 D5 65 F6 FE 24 F1 59 F9
00D0 | 16 3E 92 48 01 C0 DA 9D 9F 0A 1E 22 2F 73 C0 43
00E0 | DD 30 87 82 7D 08 14 CF 53 86 83 79 BE 71 9D AD
00F0 | CF BD F6 D3 55 EE DC AF C1 D4 1E EF B2 8B A8 75
0100 | FA 3B 45 BB 1B E4 76 D1 F4 49 E0 CB 65 1C F4 A7
0110 | A4 05 C7 93 B1 FD 30 B9 1C B1 F4 14 F8 84 0B 1A
0120 | B1 BC 8F 45 8E E0 D5 C2 CF 9F 41 84 B9 CE CE 8B
0130 | 43 BC 07 B2 F4 D2 2E 40 F7 68 32 F2 6E C3 A1 41
0140 | 5A 88 F2 42 36 A6 3E AE 30 E1 05 31 DA 63 D3 09
0150 | FE DE CC EB 81 06 C1 13 F5 C2 2A A5 EF B0 0D 69
0160 | 2D DE C1 47 14 7B 19 A0 15 C5 9A BD 07 93 AC F0
0170 | 74 53 61 80 F9 EB DE 62 3E 4E F8 CE BA 13 C8 B9
0180 | 1C 7C 92 8E C0 1E 20 22 C3 8D 53 D9 1A 27 76 C8
0190 | 57 DF 7F 6E 86 B1 94 9B C8 B2 79 8E CF 37 D8 28
01A0 | B8 AA B2 95 3E A7 AA 67 DC DF 67 C1 D1 F9 66 6D
01B0 | 39 84 83 5E 93 87 C6 8E 09 4B 5F 81 DD 93 C8 3F
01C0 | F5 83 EC 9C E0 DF 37 51 F9 9C 3A EF 93 D5 17 E6
01D0 | A0 FF 8A 09 5F 1C BF 1E 75 D7 53 B0 5F 28 85 A5
01E0 | 6D BA 1D 69 2F 71 EF 07 F3 2B AC 35 3A 83 24 27
01F0 | 11 49 C9 1F D2 7E 50 98 E1 5C C7 D6 C7 2B 8E 20
0200 | F5 E3 17 1A C0 E3 76 56 0A F9 49 B9 8C 18 60 8D
0210 | 51 DB 03 9B 1C 8A 2E 4D 87 6F 8F 7D 02 53 15 6E
0220 | B3 51 D6 5A 48 2F 92 FC 3D F4 8E 9B BD 41 B9 A3
0230 | E0 E2 83 D6 76 E5 61 1F FC 5A A2 84 DF 11 9C F5
0240 | 23 69 0C 0B 06 67 18 6B 32 9B 28 D1 DC 82 F2 2B
0250 | 37 4A 1D 2E DC CF E7 8A 8A FA D0 7E 54 B8 CD 23
0260 | 86 E0 D7 48 BB C9 8A B7 CA 06 15 FE A7 F0 77 23
0270 | 74 F4 A8 8B 83 6B 79 50 29 B7 AC 2C 98 6F ED 1C
0280 | E3 BC 3B 76 15 95 64 25 73 C7 E2 E8</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 18 D9 F0 19 B9 8E 66
0010 | AC 02 00 00 5C 07 E8 D0 E9 F0 C9 0B 74 FD 5E 4C
0020 | A8 67 C6 D1 75 FC E7 56 03 A2 27 40 6B 8B E9 CD
0030 | B4 A2 08 97 49 C8 05 C9 FE 50 02 00 1B 86 76 60
0040 | 6D D6 AE A8 B2 D8 62 4E B2 D8 DE F0 43 FD 24 F8
0050 | F3 59 7D 47 6D 2A 25 43 4E 84 99 39 B5 13 1E 87
0060 | 99 14 56 B0 0F 6C 86 41 07 6A E3 F4 BC FB F7 CE
0070 | E1 D5 D0 15 21 A2 7C 14 48 80 42 92 28 C2 99 6A
0080 | 89 EC 75 2F 8D 7B 80 D6 59 48 DE 4C 23 D6 EB 9E
0090 | 41 37 C2 6E 7E 7E 75 D5 4E 32 C4 18 C3 93 CE B7
00A0 | B4 CB 94 33 0F 64 D3 2C 97 BC C9 0B AB F1 A8 E3
00B0 | A8 79 EA 67 EB 04 7A EE F4 38 47 63 03 F5 60 8F
00C0 | 7D BB 57 46 57 68 A4 45 69 D8 51 6D 7B CB 62 85
00D0 | 2A 6D 92 20 F3 89 2F E5 E2 D2 6D 87 85 AE 64 D4
00E0 | DB 8B 53 6F 8A 86 D8 0C D4 C9 23 B2 5F 59 CD 37
00F0 | A9 03 65 77 C8 09 27 C7 83 7E D7 8D 29 F0 79 D5
0100 | EE D2 C3 65 76 D1 3F 8B DB 4C 33 1D 2E 85 5E E8
0110 | 3F 47 23 D2 1B 97 94 D0 12 BF 1D 7B 38 2C C7 A7
0120 | 40 A8 9E 76 B1 8A AD DA CA FE 56 ED B3 52 5C 2F
0130 | 65 96 53 BE AB EA 10 3C 36 8E 06 43 12 C4 20 F6
0140 | E3 50 2F 87 81 B8 52 1E 21 F1 6A 34 F4 F9 20 43
0150 | 23 CF 32 28 EB 47 CD 96 13 7E 04 31 CB A9 2E 6E
0160 | A4 E4 54 83 D4 47 B3 45 55 50 71 2E F2 97 F5 3E
0170 | BC 0F 1A 20 C0 4F 76 8C AE C3 50 86 3A 6E A7 70
0180 | 14 ED 8E 73 28 88 69 ED 5C 8E A8 A1 44 F1 B3 6C
0190 | 93 A1 A1 D9 3B 4F 60 C1 67 B0 20 C7 51 EF 30 DD
01A0 | B7 1E 48 7A C0 2A 14 4A 39 DC B6 2A 03 E2 A4 D8
01B0 | D1 52 44 D6 A2 A0 85 10 81 C3 D8 37 55 20 25 0A
01C0 | 3C AE E4 3E 41 BB B4 FA AD 8F A7 63 28 5C 57 66
01D0 | BD 44 24 7A B9 54 2D 22 24 0E 8A 5F 2F 21 6B 10
01E0 | EE A1 E8 D1 E9 70 F8 0A BC 78 17 F3 DB A4 B3 AF
01F0 | 3E EF B0 4A 26 2E 0F 68 BD 63 05 AB CF 43 26 83
0200 | E8 50 0B 7D EF 01 68 A5 60 28 3F 64 F0 64 4C EF
0210 | 52 AF 73 12 7B DC 8F 4C 22 20 C8 0B 00 72 AD 64
0220 | 2D 82 29 3B 52 3D 6E 03 97 A4 62 97 D0 EF 9A EA
0230 | DD 36 22 26 49 5E 0D F5 A9 E0 D4 43 49 FE 60 BC
0240 | 7E 52 DA 61 96 F9 89 C2 C5 EC 65 94 C6 9B F8 AA
0250 | 20 39 10 CE 8E 0D B5 48 EB 8C 61 4D 00 B7 5F 9D
0260 | 35 D2 E6 50 72 24 40 A4 01 D9 9A D0 F0 99 37 8A
0270 | F7 C1 8D 7A 37 4E 03 D3 AE 44 58 43 18 33 4F F0
0280 | 48 8F 71 BE ED 87 87 25 DF 72 AA E3</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 = BEEEBCBED75C9112319952719509E037F01A320D02CAD147F83A8A913
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>01506E2FAE318E66</code></td>
<td><code>0118D9F019B98E66</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>BC020000</code> (700 in decimal)</td>
<td><code>AC020000</code> (684 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -482,19 +482,19 @@ random_padding_bytes = BEEEBCBED75C9112319952719509E037F01A320D02CAD147F83A8A913
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>3719EC387CE6E147C8DE55741A20292D</code></td>
<td><code>E9F0C90B74FD5E4CA867C6D175FCE756</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>717EC2C26F127B5483C4A7A355A6C6AF</code></td>
<td><code>03A227406B8BE9CDB4A2089749C805C9</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_answer</td>
<td>56, 596</td>
<td><code>FE500200CFF095B26E0FC71E7207DADD</code> <code>0766CA7F1928F020051CBCADB9A5FE6E</code> <code>B68F1CCFED51EC0E1E617E84EE38AC38</code> <code>C66C5A25738CC8E69B655CEDB721B5BB</code> <code>15956D0531CF2F9D4F8AB8D29611C824</code> <code>3920027D821C4CD2ED28119949A94EB7</code> <code>FB760DF4545F32E5DBBF600D27B33EB3</code> <code>07A266F6CFB6A027BE3A7D37D34D3795</code> <code>573A14F7065D1E733263438C3E5E2A17</code> <code>D565F6FE24F159F9163E924801C0DA9D</code> <code>9F0A1E222F73C043DD3087827D0814CF</code> <code>53868379BE719DADCFBDF6D355EEDCAF</code> <code>C1D41EEFB28BA875FA3B45BB1BE476D1</code> <code>F449E0CB651CF4A7A405C793B1FD30B9</code> <code>1CB1F414F8840B1AB1BC8F458EE0D5C2</code> <code>CF9F4184B9CECE8B43BC07B2F4D22E40</code> <code>F76832F26EC3A1415A88F24236A63EAE</code> <code>30E10531DA63D309FEDECCEB8106C113</code> <code>F5C22AA5EFB00D692DDEC147147B19A0</code> <code>15C59ABD0793ACF074536180F9EBDE62</code> <code>3E4EF8CEBA13C8B91C7C928EC01E2022</code> <code>C38D53D91A2776C857DF7F6E86B1949B</code> <code>C8B2798ECF37D828B8AAB2953EA7AA67</code> <code>DCDF67C1D1F9666D3984835E9387C68E</code> <code>094B5F81DD93C83FF583EC9CE0DF3751</code> <code>F99C3AEF93D517E6A0FF8A095F1CBF1E</code> <code>75D753B05F2885A56DBA1D692F71EF07</code> <code>F32BAC353A8324271149C91FD27E5098</code> <code>E15CC7D6C72B8E20F5E3171AC0E37656</code> <code>0AF949B98C18608D51DB039B1C8A2E4D</code> <code>876F8F7D0253156EB351D65A482F92FC</code> <code>3DF48E9BBD41B9A3E0E283D676E5611F</code> <code>FC5AA284DF119CF523690C0B0667186B</code> <code>329B28D1DC82F22B374A1D2EDCCFE78A</code> <code>8AFAD07E54B8CD2386E0D748BBC98AB7</code> <code>CA0615FEA7F0772374F4A88B836B7950</code> <code>29B7AC2C986FED1CE3BC3B7615956425</code><br> <code>73C7E2E8</code></td>
<td><code>FE5002001B8676606DD6AEA8B2D8624E</code> <code>B2D8DEF043FD24F8F3597D476D2A2543</code> <code>4E849939B5131E87991456B00F6C8641</code> <code>076AE3F4BCFBF7CEE1D5D01521A27C14</code> <code>4880429228C2996A89EC752F8D7B80D6</code> <code>5948DE4C23D6EB9E4137C26E7E7E75D5</code> <code>4E32C418C393CEB7B4CB94330F64D32C</code> <code>97BCC90BABF1A8E3A879EA67EB047AEE</code> <code>F438476303F5608F7DBB57465768A445</code> <code>69D8516D7BCB62852A6D9220F3892FE5</code> <code>E2D26D8785AE64D4DB8B536F8A86D80C</code> <code>D4C923B25F59CD37A9036577C80927C7</code> <code>837ED78D29F079D5EED2C36576D13F8B</code> <code>DB4C331D2E855EE83F4723D21B9794D0</code> <code>12BF1D7B382CC7A740A89E76B18AADDA</code> <code>CAFE56EDB3525C2F659653BEABEA103C</code> <code>368E064312C420F6E3502F8781B8521E</code> <code>21F16A34F4F9204323CF3228EB47CD96</code> <code>137E0431CBA92E6EA4E45483D447B345</code> <code>5550712EF297F53EBC0F1A20C04F768C</code> <code>AEC350863A6EA77014ED8E73288869ED</code> <code>5C8EA8A144F1B36C93A1A1D93B4F60C1</code> <code>67B020C751EF30DDB71E487AC02A144A</code> <code>39DCB62A03E2A4D8D15244D6A2A08510</code> <code>81C3D8375520250A3CAEE43E41BBB4FA</code> <code>AD8FA763285C5766BD44247AB9542D22</code> <code>240E8A5F2F216B10EEA1E8D1E970F80A</code> <code>BC7817F3DBA4B3AF3EEFB04A262E0F68</code> <code>BD6305ABCF432683E8500B7DEF0168A5</code> <code>60283F64F0644CEF52AF73127BDC8F4C</code> <code>2220C80B0072AD642D82293B523D6E03</code> <code>97A46297D0EF9AEADD362226495E0DF5</code> <code>A9E0D44349FE60BC7E52DA6196F989C2</code> <code>C5EC6594C69BF8AA203910CE8E0DB548</code> <code>EB8C614D00B75F9D35D2E650722440A4</code> <code>01D99AD0F099378AF7C18D7A374E03D3</code> <code>AE44584318334FF0488F71BEED878725</code><br> <code>DF72AAE3</code></td>
<td>See below</td>
</tr>
</tbody>
@ -502,20 +502,20 @@ random_padding_bytes = BEEEBCBED75C9112319952719509E037F01A320D02CAD147F83A8A913
<!-- 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 = CFF095B26E0FC71E7207DADD0766CA7F1928F020051CBCADB9A5FE6EB68F1CCFED51EC0E1E617E84EE38AC38C66C5A25738CC8E69B655CEDB721B5BB15956D0531CF2F9D4F8AB8D29611C8243920027D821C4CD2ED28119949A94EB7FB760DF4545F32E5DBBF600D27B33EB307A266F6CFB6A027BE3A7D37D34D3795573A14F7065D1E733263438C3E5E2A17D565F6FE24F159F9163E924801C0DA9D9F0A1E222F73C043DD3087827D0814CF53868379BE719DADCFBDF6D355EEDCAFC1D41EEFB28BA875FA3B45BB1BE476D1F449E0CB651CF4A7A405C793B1FD30B91CB1F414F8840B1AB1BC8F458EE0D5C2CF9F4184B9CECE8B43BC07B2F4D22E40F76832F26EC3A1415A88F24236A63EAE30E10531DA63D309FEDECCEB8106C113F5C22AA5EFB00D692DDEC147147B19A015C59ABD0793ACF074536180F9EBDE623E4EF8CEBA13C8B91C7C928EC01E2022C38D53D91A2776C857DF7F6E86B1949BC8B2798ECF37D828B8AAB2953EA7AA67DCDF67C1D1F9666D3984835E9387C68E094B5F81DD93C83FF583EC9CE0DF3751F99C3AEF93D517E6A0FF8A095F1CBF1E75D753B05F2885A56DBA1D692F71EF07F32BAC353A8324271149C91FD27E5098E15CC7D6C72B8E20F5E3171AC0E376560AF949B98C18608D51DB039B1C8A2E4D876F8F7D0253156EB351D65A482F92FC3DF48E9BBD41B9A3E0E283D676E5611FFC5AA284DF119CF523690C0B0667186B329B28D1DC82F22B374A1D2EDCCFE78A8AFAD07E54B8CD2386E0D748BBC98AB7CA0615FEA7F0772374F4A88B836B795029B7AC2C986FED1CE3BC3B761595642573C7E2E8
tmp_aes_key = 672C272E9B9E62D81596A1E4C82B3383E58BB539EBBB480CA55D06C715CD3FA2
tmp_aes_iv = 9F0AAB8D472F050F73550850995279EDD8DEAAF68371A4413396DA5B52696A7C</code></pre>
<pre><code>encrypted_answer = 1B8676606DD6AEA8B2D8624EB2D8DEF043FD24F8F3597D476D2A25434E849939B5131E87991456B00F6C8641076AE3F4BCFBF7CEE1D5D01521A27C144880429228C2996A89EC752F8D7B80D65948DE4C23D6EB9E4137C26E7E7E75D54E32C418C393CEB7B4CB94330F64D32C97BCC90BABF1A8E3A879EA67EB047AEEF438476303F5608F7DBB57465768A44569D8516D7BCB62852A6D9220F3892FE5E2D26D8785AE64D4DB8B536F8A86D80CD4C923B25F59CD37A9036577C80927C7837ED78D29F079D5EED2C36576D13F8BDB4C331D2E855EE83F4723D21B9794D012BF1D7B382CC7A740A89E76B18AADDACAFE56EDB3525C2F659653BEABEA103C368E064312C420F6E3502F8781B8521E21F16A34F4F9204323CF3228EB47CD96137E0431CBA92E6EA4E45483D447B3455550712EF297F53EBC0F1A20C04F768CAEC350863A6EA77014ED8E73288869ED5C8EA8A144F1B36C93A1A1D93B4F60C167B020C751EF30DDB71E487AC02A144A39DCB62A03E2A4D8D15244D6A2A0851081C3D8375520250A3CAEE43E41BBB4FAAD8FA763285C5766BD44247AB9542D22240E8A5F2F216B10EEA1E8D1E970F80ABC7817F3DBA4B3AF3EEFB04A262E0F68BD6305ABCF432683E8500B7DEF0168A560283F64F0644CEF52AF73127BDC8F4C2220C80B0072AD642D82293B523D6E0397A46297D0EF9AEADD362226495E0DF5A9E0D44349FE60BC7E52DA6196F989C2C5EC6594C69BF8AA203910CE8E0DB548EB8C614D00B75F9D35D2E650722440A401D99AD0F099378AF7C18D7A374E03D3AE44584318334FF0488F71BEED878725DF72AAE3
tmp_aes_key = 4B1FC0BB5AEEB48000D464517C3F51C86446FF46D48D1E8B5943CB8D53704586
tmp_aes_iv = 827E440658018F2BF544D1E58D761A8FDC27720E952D37EA7A71C66BBBFACEF6</code></pre>
<!-- end server_DH_inner_data_input -->
<p>Yielding:</p>
<!-- start server_DH_inner_data_output -->
<pre><code>answer_with_hash = 63A591C00E6716FD5398DC64EF9B2BB49165FC2DBA0D89B53719EC387CE6E147C8DE55741A20292D717EC2C26F127B5483C4A7A355A6C6AF03000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE00010049BD77125994C414F8DC26F7AE671E032D5F016AEC30798EB27E5FC4FFD7819958232C656C55F7B7427E56164FF0D2916CD14405A6D7F97C7C15F76908FDAE94EDCD693DD4EFB7A7B41D9B357BD60468F82779BF9569B208CBF57223582A1685ACB0B0FB9A61A771AA0A08D5CCC0ED07083C5794A721B2476850B98728B5F5C1DD3CD60079A56C8189C5B64C0E53BC3355D71E2EFCC9265908BF1F3FBB7A5BEB07E3EDDF9AC1A13E6C84FBD322D099765672759177640DC3F871FE0C6DB45F8FAD950A7BFAE43D927BEB66E65CA7C2C54B538647E60D9FF9EADE9D31E1ABF67AA47DCD3F08E9E54BFC4BFC5FA90D5E0366F2CB1FF415F3C875744F9EE6DD43D4AE318E665F6C1219CEE447E7
answer = BA0D89B53719EC387CE6E147C8DE55741A20292D717EC2C26F127B5483C4A7A355A6C6AF03000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE00010049BD77125994C414F8DC26F7AE671E032D5F016AEC30798EB27E5FC4FFD7819958232C656C55F7B7427E56164FF0D2916CD14405A6D7F97C7C15F76908FDAE94EDCD693DD4EFB7A7B41D9B357BD60468F82779BF9569B208CBF57223582A1685ACB0B0FB9A61A771AA0A08D5CCC0ED07083C5794A721B2476850B98728B5F5C1DD3CD60079A56C8189C5B64C0E53BC3355D71E2EFCC9265908BF1F3FBB7A5BEB07E3EDDF9AC1A13E6C84FBD322D099765672759177640DC3F871FE0C6DB45F8FAD950A7BFAE43D927BEB66E65CA7C2C54B538647E60D9FF9EADE9D31E1ABF67AA47DCD3F08E9E54BFC4BFC5FA90D5E0366F2CB1FF415F3C875744F9EE6DD43D4AE318E665F6C1219CEE447E7</code></pre>
<pre><code>answer_with_hash = FDC73C9532916188A113D3699EE14872D694DE42BA0D89B5E9F0C90B74FD5E4CA867C6D175FCE75603A227406B8BE9CDB4A2089749C805C903000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE00010057F653EFBA15BFC1850B47BE7C388554B4916090033397032D9380162500698EC90250462F9C6D085C48E230F1F8ED6B32EA2496F8F34AC438BA6A846D55D1182253AAC403424BBEA07DEF3AF92DDE35A6A6F9531E2FCAC902EB61F51B8D8DAB44AE7D4532DB26C33C3F9DDFB404D53A0DD0DB659E8E7D97936960D96354595276AB3E2AEF00ECBFA29C27A4CC9C35C5AD4810403CCF60448AE4A3D8A420740CA99E1B98CF02424D7835B102745F5D9D2CE990162FFBDE55CE9E1124A3C5A31E8BA54DD332EA6F12C2EB7A5ADE8194966C16EBEA2333058A3308A88438F63019511A48CCA47E48DB2451132395E025BF1BBF4DC274AF74CEB64FDAD974ECD9F619B98E660EEAF6D25B0A055E
answer = BA0D89B5E9F0C90B74FD5E4CA867C6D175FCE75603A227406B8BE9CDB4A2089749C805C903000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE00010057F653EFBA15BFC1850B47BE7C388554B4916090033397032D9380162500698EC90250462F9C6D085C48E230F1F8ED6B32EA2496F8F34AC438BA6A846D55D1182253AAC403424BBEA07DEF3AF92DDE35A6A6F9531E2FCAC902EB61F51B8D8DAB44AE7D4532DB26C33C3F9DDFB404D53A0DD0DB659E8E7D97936960D96354595276AB3E2AEF00ECBFA29C27A4CC9C35C5AD4810403CCF60448AE4A3D8A420740CA99E1B98CF02424D7835B102745F5D9D2CE990162FFBDE55CE9E1124A3C5A31E8BA54DD332EA6F12C2EB7A5ADE8194966C16EBEA2333058A3308A88438F63019511A48CCA47E48DB2451132395E025BF1BBF4DC274AF74CEB64FDAD974ECD9F619B98E660EEAF6D25B0A055E</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 37 19 EC 38 7C E6 E1 47 C8 DE 55 74
0010 | 1A 20 29 2D 71 7E C2 C2 6F 12 7B 54 83 C4 A7 A3
0020 | 55 A6 C6 AF 03 00 00 00 FE 00 01 00 C7 1C AE B9
<pre><code>0000 | BA 0D 89 B5 E9 F0 C9 0B 74 FD 5E 4C A8 67 C6 D1
0010 | 75 FC E7 56 03 A2 27 40 6B 8B E9 CD B4 A2 08 97
0020 | 49 C8 05 C9 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 = BA0D89B53719EC387CE6E147C8DE55741A20292D717EC2C26F127B5483C4A7A355A6C6A
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 | 49 BD 77 12 59 94 C4 14 F8 DC 26 F7 AE 67 1E 03
0140 | 2D 5F 01 6A EC 30 79 8E B2 7E 5F C4 FF D7 81 99
0150 | 58 23 2C 65 6C 55 F7 B7 42 7E 56 16 4F F0 D2 91
0160 | 6C D1 44 05 A6 D7 F9 7C 7C 15 F7 69 08 FD AE 94
0170 | ED CD 69 3D D4 EF B7 A7 B4 1D 9B 35 7B D6 04 68
0180 | F8 27 79 BF 95 69 B2 08 CB F5 72 23 58 2A 16 85
0190 | AC B0 B0 FB 9A 61 A7 71 AA 0A 08 D5 CC C0 ED 07
01A0 | 08 3C 57 94 A7 21 B2 47 68 50 B9 87 28 B5 F5 C1
01B0 | DD 3C D6 00 79 A5 6C 81 89 C5 B6 4C 0E 53 BC 33
01C0 | 55 D7 1E 2E FC C9 26 59 08 BF 1F 3F BB 7A 5B EB
01D0 | 07 E3 ED DF 9A C1 A1 3E 6C 84 FB D3 22 D0 99 76
01E0 | 56 72 75 91 77 64 0D C3 F8 71 FE 0C 6D B4 5F 8F
01F0 | AD 95 0A 7B FA E4 3D 92 7B EB 66 E6 5C A7 C2 C5
0200 | 4B 53 86 47 E6 0D 9F F9 EA DE 9D 31 E1 AB F6 7A
0210 | A4 7D CD 3F 08 E9 E5 4B FC 4B FC 5F A9 0D 5E 03
0220 | 66 F2 CB 1F F4 15 F3 C8 75 74 4F 9E E6 DD 43 D4
0230 | AE 31 8E 66</code></pre>
0130 | 57 F6 53 EF BA 15 BF C1 85 0B 47 BE 7C 38 85 54
0140 | B4 91 60 90 03 33 97 03 2D 93 80 16 25 00 69 8E
0150 | C9 02 50 46 2F 9C 6D 08 5C 48 E2 30 F1 F8 ED 6B
0160 | 32 EA 24 96 F8 F3 4A C4 38 BA 6A 84 6D 55 D1 18
0170 | 22 53 AA C4 03 42 4B BE A0 7D EF 3A F9 2D DE 35
0180 | A6 A6 F9 53 1E 2F CA C9 02 EB 61 F5 1B 8D 8D AB
0190 | 44 AE 7D 45 32 DB 26 C3 3C 3F 9D DF B4 04 D5 3A
01A0 | 0D D0 DB 65 9E 8E 7D 97 93 69 60 D9 63 54 59 52
01B0 | 76 AB 3E 2A EF 00 EC BF A2 9C 27 A4 CC 9C 35 C5
01C0 | AD 48 10 40 3C CF 60 44 8A E4 A3 D8 A4 20 74 0C
01D0 | A9 9E 1B 98 CF 02 42 4D 78 35 B1 02 74 5F 5D 9D
01E0 | 2C E9 90 16 2F FB DE 55 CE 9E 11 24 A3 C5 A3 1E
01F0 | 8B A5 4D D3 32 EA 6F 12 C2 EB 7A 5A DE 81 94 96
0200 | 6C 16 EB EA 23 33 05 8A 33 08 A8 84 38 F6 30 19
0210 | 51 1A 48 CC A4 7E 48 DB 24 51 13 23 95 E0 25 BF
0220 | 1B BF 4D C2 74 AF 74 CE B6 4F DA D9 74 EC D9 F6
0230 | 19 B9 8E 66</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 = BA0D89B53719EC387CE6E147C8DE55741A20292D717EC2C26F127B5483C4A7A355A6C6A
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>3719EC387CE6E147C8DE55741A20292D</code></td>
<td><code>E9F0C90B74FD5E4CA867C6D175FCE756</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>717EC2C26F127B5483C4A7A355A6C6AF</code></td>
<td><code>03A227406B8BE9CDB4A2089749C805C9</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
@ -594,13 +594,13 @@ answer = BA0D89B53719EC387CE6E147C8DE55741A20292D717EC2C26F127B5483C4A7A355A6C6A
<tr>
<td>g_a</td>
<td>300, 260</td>
<td><code>FE00010049BD77125994C414F8DC26F7</code> <code>AE671E032D5F016AEC30798EB27E5FC4</code> <code>FFD7819958232C656C55F7B7427E5616</code> <code>4FF0D2916CD14405A6D7F97C7C15F769</code> <code>08FDAE94EDCD693DD4EFB7A7B41D9B35</code> <code>7BD60468F82779BF9569B208CBF57223</code> <code>582A1685ACB0B0FB9A61A771AA0A08D5</code> <code>CCC0ED07083C5794A721B2476850B987</code> <code>28B5F5C1DD3CD60079A56C8189C5B64C</code> <code>0E53BC3355D71E2EFCC9265908BF1F3F</code> <code>BB7A5BEB07E3EDDF9AC1A13E6C84FBD3</code> <code>22D099765672759177640DC3F871FE0C</code> <code>6DB45F8FAD950A7BFAE43D927BEB66E6</code> <code>5CA7C2C54B538647E60D9FF9EADE9D31</code> <code>E1ABF67AA47DCD3F08E9E54BFC4BFC5F</code> <code>A90D5E0366F2CB1FF415F3C875744F9E</code><br> <code>E6DD43D4</code></td>
<td><code>FE00010057F653EFBA15BFC1850B47BE</code> <code>7C388554B4916090033397032D938016</code> <code>2500698EC90250462F9C6D085C48E230</code> <code>F1F8ED6B32EA2496F8F34AC438BA6A84</code> <code>6D55D1182253AAC403424BBEA07DEF3A</code> <code>F92DDE35A6A6F9531E2FCAC902EB61F5</code> <code>1B8D8DAB44AE7D4532DB26C33C3F9DDF</code> <code>B404D53A0DD0DB659E8E7D97936960D9</code> <code>6354595276AB3E2AEF00ECBFA29C27A4</code> <code>CC9C35C5AD4810403CCF60448AE4A3D8</code> <code>A420740CA99E1B98CF02424D7835B102</code> <code>745F5D9D2CE990162FFBDE55CE9E1124</code> <code>A3C5A31E8BA54DD332EA6F12C2EB7A5A</code> <code>DE8194966C16EBEA2333058A3308A884</code> <code>38F63019511A48CCA47E48DB24511323</code> <code>95E025BF1BBF4DC274AF74CEB64FDAD9</code><br> <code>74ECD9F6</code></td>
<td><code>g_a</code> diffie-hellman parameter</td>
</tr>
<tr>
<td>server_time</td>
<td>560, 4</td>
<td><code>AE318E66</code> (1720594862 in decimal)</td>
<td><code>19B98E66</code> (1720629529 in decimal)</td>
<td>Server time</td>
</tr>
</tbody>
@ -609,34 +609,34 @@ answer = BA0D89B53719EC387CE6E147C8DE55741A20292D717EC2C26F127B5483C4A7A355A6C6A
<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 = 442C1C69C56B3CE98B537E9FB3078CBBE7E628FCEF252BFF4C7C941E9818F366A9BF4A9AC63C7E2CA8C08EBBC1224B4DD81B26D02FC42E19C98E449C43BAD2584AA46B8EFD6F0E1F8B7432DB9134A7D7C587D904DFE815B5D808ACCE8DD68A1CF56C8E24691B4BA45C8E9B3C8DB5A19B444DAA14865FD1A72646E8C4DF334113006FEEDE3D2B75691868CC451A718C0851F2FE85D9C2C13FC492426327B0F6CCF6E178D4BE1A34177FEA4682C81B91D7628B52BE952E468308929EE8643C828F436734E4719CBA5F12B9682DD442DF60E48A365C488B15283243DEFF41AC2F93E2090BA5FB2F55BEC6F69060976FAF5937716BA1D3057E3C67BF240DEA11FC0C</code></pre>
<pre><code>b = FC0A88D80534D941EDB44DD44A69CFFD47C22344B9D6BC67F0E8CF0EBDAEEB626A470D56461C2480262A3BF9A911339C2F209AAF8FA01CB08486C8FAD99E761134CEE10B1AD4538777EE8F3576C7F3C9073DA0041FB8522FEF253967890C0D76D56FE8F116C0975725B3B1142CB6FD32373758346BB04AD7D18A035EDC5BE8FE356498FCB823AC27446BC7B195C285AD3180897F0F4BE635B1B8B6DACA240B7BC5A28D58103077525E4CA622C7AF6573717F7592005393038E8EB5DE2C8C2265211E503297938C4AC296077EE680504A05AE658A1EFD0C8203E8A533FA7EEDDA3B480F4B1A4C4C707278A81693DC310C4AA3EF714E458C177CFFB1A689CFCC44</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 = A78F9B632C410721AB604EC77BE2A840AA42C3B7F41E90EC534172B37EA8F485F9723C71ED807D477E603864DF9F99C53BA3F16D300CAE3AC579124C47D72897EA57B153B21D72EBDB53092BBD6ED5529A0415866B6051653DAFEBD4926F2645E3F4EAEAC26221E7931CF089C1F7F72DC2A401E45D7784B031AC71D765CE2473C7F944B50827076826B6B5070B40F2FED099B8AAAF4B67BBAD1A5DC3816E275A4DD9CA9A03BC62C7BDCE8330385F03812B6C3CB132EF3D94F457B5B2FAEA22377B1B910657D1BD863F101788318E0DB581BA3876EC697AB63478F259EDD726FAA803CBC5938637F8BD926B0D1231DF42762FAC6D8E078AD2F6874C90641DA177</code></pre>
<pre><code>g_b = 59DFCABB95FC5BC927FF2BDE3FBCD0A8B1E1009632FF85C697434F919173720273893E6E88E70A75E3FF80C63623A44A05B890460DA9C30326304771C45F6823B47A9D5DEF5E29065D542116C5F4A7EBF1C12FBC204D501062E3E8DC6EF7BABAAB239110B0F50E2E2387E3792BB32AEDD9D2FA0C2041329F20B96D06B59CCE2ED22451A12C1648C9B50C2C9DA796C5415E24D7D3905A6470CC45E050B48086A71239EDBB29131B63C391DB14C702E5B3833947028CA9576B819FF4FC106C8AF7DD63A4ACB0158BC7F761658169EFA0CDA8805C31546A05A498D52C2C1A50C7F5899F0D058D77FD718F8B6772405980CE49F413292049F2FDD9919C24EFC5A4BF</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 37 19 EC 38 7C E6 E1 47 C8 DE 55 74
0010 | 1A 20 29 2D 71 7E C2 C2 6F 12 7B 54 83 C4 A7 A3
0020 | 55 A6 C6 AF 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | A7 8F 9B 63 2C 41 07 21 AB 60 4E C7 7B E2 A8 40
0040 | AA 42 C3 B7 F4 1E 90 EC 53 41 72 B3 7E A8 F4 85
0050 | F9 72 3C 71 ED 80 7D 47 7E 60 38 64 DF 9F 99 C5
0060 | 3B A3 F1 6D 30 0C AE 3A C5 79 12 4C 47 D7 28 97
0070 | EA 57 B1 53 B2 1D 72 EB DB 53 09 2B BD 6E D5 52
0080 | 9A 04 15 86 6B 60 51 65 3D AF EB D4 92 6F 26 45
0090 | E3 F4 EA EA C2 62 21 E7 93 1C F0 89 C1 F7 F7 2D
00A0 | C2 A4 01 E4 5D 77 84 B0 31 AC 71 D7 65 CE 24 73
00B0 | C7 F9 44 B5 08 27 07 68 26 B6 B5 07 0B 40 F2 FE
00C0 | D0 99 B8 AA AF 4B 67 BB AD 1A 5D C3 81 6E 27 5A
00D0 | 4D D9 CA 9A 03 BC 62 C7 BD CE 83 30 38 5F 03 81
00E0 | 2B 6C 3C B1 32 EF 3D 94 F4 57 B5 B2 FA EA 22 37
00F0 | 7B 1B 91 06 57 D1 BD 86 3F 10 17 88 31 8E 0D B5
0100 | 81 BA 38 76 EC 69 7A B6 34 78 F2 59 ED D7 26 FA
0110 | A8 03 CB C5 93 86 37 F8 BD 92 6B 0D 12 31 DF 42
0120 | 76 2F AC 6D 8E 07 8A D2 F6 87 4C 90 64 1D A1 77</code></pre>
<pre><code>0000 | 54 B6 43 66 E9 F0 C9 0B 74 FD 5E 4C A8 67 C6 D1
0010 | 75 FC E7 56 03 A2 27 40 6B 8B E9 CD B4 A2 08 97
0020 | 49 C8 05 C9 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | 59 DF CA BB 95 FC 5B C9 27 FF 2B DE 3F BC D0 A8
0040 | B1 E1 00 96 32 FF 85 C6 97 43 4F 91 91 73 72 02
0050 | 73 89 3E 6E 88 E7 0A 75 E3 FF 80 C6 36 23 A4 4A
0060 | 05 B8 90 46 0D A9 C3 03 26 30 47 71 C4 5F 68 23
0070 | B4 7A 9D 5D EF 5E 29 06 5D 54 21 16 C5 F4 A7 EB
0080 | F1 C1 2F BC 20 4D 50 10 62 E3 E8 DC 6E F7 BA BA
0090 | AB 23 91 10 B0 F5 0E 2E 23 87 E3 79 2B B3 2A ED
00A0 | D9 D2 FA 0C 20 41 32 9F 20 B9 6D 06 B5 9C CE 2E
00B0 | D2 24 51 A1 2C 16 48 C9 B5 0C 2C 9D A7 96 C5 41
00C0 | 5E 24 D7 D3 90 5A 64 70 CC 45 E0 50 B4 80 86 A7
00D0 | 12 39 ED BB 29 13 1B 63 C3 91 DB 14 C7 02 E5 B3
00E0 | 83 39 47 02 8C A9 57 6B 81 9F F4 FC 10 6C 8A F7
00F0 | DD 63 A4 AC B0 15 8B C7 F7 61 65 81 69 EF A0 CD
0100 | A8 80 5C 31 54 6A 05 A4 98 D5 2C 2C 1A 50 C7 F5
0110 | 89 9F 0D 05 8D 77 FD 71 8F 8B 67 72 40 59 80 CE
0120 | 49 F4 13 29 20 49 F2 FD D9 91 9C 24 EF C5 A4 BF</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 = BA0D89B53719EC387CE6E147C8DE55741A20292D717EC2C26F127B5483C4A7A355A6C6A
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>3719EC387CE6E147C8DE55741A20292D</code></td>
<td><code>E9F0C90B74FD5E4CA867C6D175FCE756</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>717EC2C26F127B5483C4A7A355A6C6AF</code></td>
<td><code>03A227406B8BE9CDB4A2089749C805C9</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>g_b</td>
<td>36, 260</td>
<td><code>FE000100A78F9B632C410721AB604EC7</code> <code>7BE2A840AA42C3B7F41E90EC534172B3</code> <code>7EA8F485F9723C71ED807D477E603864</code> <code>DF9F99C53BA3F16D300CAE3AC579124C</code> <code>47D72897EA57B153B21D72EBDB53092B</code> <code>BD6ED5529A0415866B6051653DAFEBD4</code> <code>926F2645E3F4EAEAC26221E7931CF089</code> <code>C1F7F72DC2A401E45D7784B031AC71D7</code> <code>65CE2473C7F944B50827076826B6B507</code> <code>0B40F2FED099B8AAAF4B67BBAD1A5DC3</code> <code>816E275A4DD9CA9A03BC62C7BDCE8330</code> <code>385F03812B6C3CB132EF3D94F457B5B2</code> <code>FAEA22377B1B910657D1BD863F101788</code> <code>318E0DB581BA3876EC697AB63478F259</code> <code>EDD726FAA803CBC5938637F8BD926B0D</code> <code>1231DF42762FAC6D8E078AD2F6874C90</code><br> <code>641DA177</code></td>
<td><code>FE00010059DFCABB95FC5BC927FF2BDE</code> <code>3FBCD0A8B1E1009632FF85C697434F91</code> <code>9173720273893E6E88E70A75E3FF80C6</code> <code>3623A44A05B890460DA9C30326304771</code> <code>C45F6823B47A9D5DEF5E29065D542116</code> <code>C5F4A7EBF1C12FBC204D501062E3E8DC</code> <code>6EF7BABAAB239110B0F50E2E2387E379</code> <code>2BB32AEDD9D2FA0C2041329F20B96D06</code> <code>B59CCE2ED22451A12C1648C9B50C2C9D</code> <code>A796C5415E24D7D3905A6470CC45E050</code> <code>B48086A71239EDBB29131B63C391DB14</code> <code>C702E5B3833947028CA9576B819FF4FC</code> <code>106C8AF7DD63A4ACB0158BC7F7616581</code> <code>69EFA0CDA8805C31546A05A498D52C2C</code> <code>1A50C7F5899F0D058D77FD718F8B6772</code> <code>405980CE49F413292049F2FDD9919C24</code><br> <code>EFC5A4BF</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 = BA0D89B53719EC387CE6E147C8DE55741A20292D717EC2C26F127B5483C4A7A355A6C6A
<!-- 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 = 54B643663719EC387CE6E147C8DE55741A20292D717EC2C26F127B5483C4A7A355A6C6AF0000000000000000FE000100A78F9B632C410721AB604EC77BE2A840AA42C3B7F41E90EC534172B37EA8F485F9723C71ED807D477E603864DF9F99C53BA3F16D300CAE3AC579124C47D72897EA57B153B21D72EBDB53092BBD6ED5529A0415866B6051653DAFEBD4926F2645E3F4EAEAC26221E7931CF089C1F7F72DC2A401E45D7784B031AC71D765CE2473C7F944B50827076826B6B5070B40F2FED099B8AAAF4B67BBAD1A5DC3816E275A4DD9CA9A03BC62C7BDCE8330385F03812B6C3CB132EF3D94F457B5B2FAEA22377B1B910657D1BD863F101788318E0DB581BA3876EC697AB63478F259EDD726FAA803CBC5938637F8BD926B0D1231DF42762FAC6D8E078AD2F6874C90641DA177
padding = 97C9A0D0FF0999F62468F3B7
tmp_aes_key = 672C272E9B9E62D81596A1E4C82B3383E58BB539EBBB480CA55D06C715CD3FA2
tmp_aes_iv = 9F0AAB8D472F050F73550850995279EDD8DEAAF68371A4413396DA5B52696A7C</code></pre>
<pre><code>data = 54B64366E9F0C90B74FD5E4CA867C6D175FCE75603A227406B8BE9CDB4A2089749C805C90000000000000000FE00010059DFCABB95FC5BC927FF2BDE3FBCD0A8B1E1009632FF85C697434F919173720273893E6E88E70A75E3FF80C63623A44A05B890460DA9C30326304771C45F6823B47A9D5DEF5E29065D542116C5F4A7EBF1C12FBC204D501062E3E8DC6EF7BABAAB239110B0F50E2E2387E3792BB32AEDD9D2FA0C2041329F20B96D06B59CCE2ED22451A12C1648C9B50C2C9DA796C5415E24D7D3905A6470CC45E050B48086A71239EDBB29131B63C391DB14C702E5B3833947028CA9576B819FF4FC106C8AF7DD63A4ACB0158BC7F761658169EFA0CDA8805C31546A05A498D52C2C1A50C7F5899F0D058D77FD718F8B6772405980CE49F413292049F2FDD9919C24EFC5A4BF
padding = 50AC8E7A783D2A6C6574D715
tmp_aes_key = 4B1FC0BB5AEEB48000D464517C3F51C86446FF46D48D1E8B5943CB8D53704586
tmp_aes_iv = 827E440658018F2BF544D1E58D761A8FDC27720E952D37EA7A71C66BBBFACEF6</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 = AC1F032525D2C6AA947F77F88EA6CEE1D7BB7004EEF5EE6F25938DC660C63B7B856127A56DDA5737EE67B52761AFA601E7033A8F019DAB2F6DF782EC0C60C2AF13F4F204E60BC69700AC5A807084FB77397B1CF50089D6297BEA7B3F10BBE3A6A6F2659DCE16AAEE2E27FCB12DCF088E96B126FBB7548C7303B1060D1399964CE0694977FBA6F1BE828E4087AEC65E6DCAD6FF26B0270A5ABDDE4EAFC5DBA24A806A4DAEFA7C8B5ECC4DEADFB4B9198E65F202A45CDFF3266C6900E8CA0E30B97C6E1AEEB9AEBF20D85CDC70A7B84C7673F6865349639E93833959414149DE240792E4B34859615DD1DABCA82A584A2E23759D6656F2209EF0E47CEB9191C080FDE9F48BB56565403DCD828EAA8DC088CB58DF1EDAF1FCEDE4BCE064A5BAAC3C986D07F70F14C5129073987DC0A0FFC9A06D06F0AE2D3EC09E2A3516A9BC8252F32F3635E8372CCDCBB409932CE0C89C</code></pre>
<pre><code>encrypted_data = 9A3F05B76B4C210CA7F3F56A88EEAA86763C699D4D4CD3F6DCE1DDF5E1EEAD1EA6131546C389312D74289BF67D020C74D8AACB336A9101396004C7558A87D9525C08A8599E02B63B7E23B0495A099E389DB2BF25AEC6AF4D7D7D3257558DD71E9141CC88BABB86F4ACA65574D18CF404B75E61F133B827DFAB845FBE824D3D2F5CFEF6E67A85E8E5BF4AC0CB1E81BB8408670D355AD972C8F1C786602159962827360A64D00E49006B2C0852B387A8DA49C87AE5B2B0972F04B16CC0B5F6952524EB4EEDBF5B76F3A9A3CF8BAE87AD5CF8204E4E20A1878E46A536C4BC16430CB379D2D59DE922C2815751ECC532B7703A86C6086C638CE61391795FA56DF876758CDA328860275F9548980D30F7C935C19423B36478DF2905E204884B5A77663F3495D9BC5E49BE58BBAAE8EF37A98A0284A2B7B7EE3CBA12A670F7739D3807FEC36950B167E0385C719F54845F51C2</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 CC 2A 0E 00 AE 31 8E 66
0010 | 78 01 00 00 1F 5F 04 F5 37 19 EC 38 7C E6 E1 47
0020 | C8 DE 55 74 1A 20 29 2D 71 7E C2 C2 6F 12 7B 54
0030 | 83 C4 A7 A3 55 A6 C6 AF FE 50 01 00 AC 1F 03 25
0040 | 25 D2 C6 AA 94 7F 77 F8 8E A6 CE E1 D7 BB 70 04
0050 | EE F5 EE 6F 25 93 8D C6 60 C6 3B 7B 85 61 27 A5
0060 | 6D DA 57 37 EE 67 B5 27 61 AF A6 01 E7 03 3A 8F
0070 | 01 9D AB 2F 6D F7 82 EC 0C 60 C2 AF 13 F4 F2 04
0080 | E6 0B C6 97 00 AC 5A 80 70 84 FB 77 39 7B 1C F5
0090 | 00 89 D6 29 7B EA 7B 3F 10 BB E3 A6 A6 F2 65 9D
00A0 | CE 16 AA EE 2E 27 FC B1 2D CF 08 8E 96 B1 26 FB
00B0 | B7 54 8C 73 03 B1 06 0D 13 99 96 4C E0 69 49 77
00C0 | FB A6 F1 BE 82 8E 40 87 AE C6 5E 6D CA D6 FF 26
00D0 | B0 27 0A 5A BD DE 4E AF C5 DB A2 4A 80 6A 4D AE
00E0 | FA 7C 8B 5E CC 4D EA DF B4 B9 19 8E 65 F2 02 A4
00F0 | 5C DF F3 26 6C 69 00 E8 CA 0E 30 B9 7C 6E 1A EE
0100 | B9 AE BF 20 D8 5C DC 70 A7 B8 4C 76 73 F6 86 53
0110 | 49 63 9E 93 83 39 59 41 41 49 DE 24 07 92 E4 B3
0120 | 48 59 61 5D D1 DA BC A8 2A 58 4A 2E 23 75 9D 66
0130 | 56 F2 20 9E F0 E4 7C EB 91 91 C0 80 FD E9 F4 8B
0140 | B5 65 65 40 3D CD 82 8E AA 8D C0 88 CB 58 DF 1E
0150 | DA F1 FC ED E4 BC E0 64 A5 BA AC 3C 98 6D 07 F7
0160 | 0F 14 C5 12 90 73 98 7D C0 A0 FF C9 A0 6D 06 F0
0170 | AE 2D 3E C0 9E 2A 35 16 A9 BC 82 52 F3 2F 36 35
0180 | E8 37 2C CD CB B4 09 93 2C E0 C8 9C</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 EC 62 0B 00 1A B9 8E 66
0010 | 78 01 00 00 1F 5F 04 F5 E9 F0 C9 0B 74 FD 5E 4C
0020 | A8 67 C6 D1 75 FC E7 56 03 A2 27 40 6B 8B E9 CD
0030 | B4 A2 08 97 49 C8 05 C9 FE 50 01 00 9A 3F 05 B7
0040 | 6B 4C 21 0C A7 F3 F5 6A 88 EE AA 86 76 3C 69 9D
0050 | 4D 4C D3 F6 DC E1 DD F5 E1 EE AD 1E A6 13 15 46
0060 | C3 89 31 2D 74 28 9B F6 7D 02 0C 74 D8 AA CB 33
0070 | 6A 91 01 39 60 04 C7 55 8A 87 D9 52 5C 08 A8 59
0080 | 9E 02 B6 3B 7E 23 B0 49 5A 09 9E 38 9D B2 BF 25
0090 | AE C6 AF 4D 7D 7D 32 57 55 8D D7 1E 91 41 CC 88
00A0 | BA BB 86 F4 AC A6 55 74 D1 8C F4 04 B7 5E 61 F1
00B0 | 33 B8 27 DF AB 84 5F BE 82 4D 3D 2F 5C FE F6 E6
00C0 | 7A 85 E8 E5 BF 4A C0 CB 1E 81 BB 84 08 67 0D 35
00D0 | 5A D9 72 C8 F1 C7 86 60 21 59 96 28 27 36 0A 64
00E0 | D0 0E 49 00 6B 2C 08 52 B3 87 A8 DA 49 C8 7A E5
00F0 | B2 B0 97 2F 04 B1 6C C0 B5 F6 95 25 24 EB 4E ED
0100 | BF 5B 76 F3 A9 A3 CF 8B AE 87 AD 5C F8 20 4E 4E
0110 | 20 A1 87 8E 46 A5 36 C4 BC 16 43 0C B3 79 D2 D5
0120 | 9D E9 22 C2 81 57 51 EC C5 32 B7 70 3A 86 C6 08
0130 | 6C 63 8C E6 13 91 79 5F A5 6D F8 76 75 8C DA 32
0140 | 88 60 27 5F 95 48 98 0D 30 F7 C9 35 C1 94 23 B3
0150 | 64 78 DF 29 05 E2 04 88 4B 5A 77 66 3F 34 95 D9
0160 | BC 5E 49 BE 58 BB AA E8 EF 37 A9 8A 02 84 A2 B7
0170 | B7 EE 3C BA 12 A6 70 F7 73 9D 38 07 FE C3 69 50
0180 | B1 67 E0 38 5C 71 9F 54 84 5F 51 C2</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>CC2A0E00AE318E66</code></td>
<td><code>EC620B001AB98E66</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>3719EC387CE6E147C8DE55741A20292D</code></td>
<td><code>E9F0C90B74FD5E4CA867C6D175FCE756</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>717EC2C26F127B5483C4A7A355A6C6AF</code></td>
<td><code>03A227406B8BE9CDB4A2089749C805C9</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_data</td>
<td>56, 340</td>
<td><code>FE500100AC1F032525D2C6AA947F77F8</code> <code>8EA6CEE1D7BB7004EEF5EE6F25938DC6</code> <code>60C63B7B856127A56DDA5737EE67B527</code> <code>61AFA601E7033A8F019DAB2F6DF782EC</code> <code>0C60C2AF13F4F204E60BC69700AC5A80</code> <code>7084FB77397B1CF50089D6297BEA7B3F</code> <code>10BBE3A6A6F2659DCE16AAEE2E27FCB1</code> <code>2DCF088E96B126FBB7548C7303B1060D</code> <code>1399964CE0694977FBA6F1BE828E4087</code> <code>AEC65E6DCAD6FF26B0270A5ABDDE4EAF</code> <code>C5DBA24A806A4DAEFA7C8B5ECC4DEADF</code> <code>B4B9198E65F202A45CDFF3266C6900E8</code> <code>CA0E30B97C6E1AEEB9AEBF20D85CDC70</code> <code>A7B84C7673F6865349639E9383395941</code> <code>4149DE240792E4B34859615DD1DABCA8</code> <code>2A584A2E23759D6656F2209EF0E47CEB</code> <code>9191C080FDE9F48BB56565403DCD828E</code> <code>AA8DC088CB58DF1EDAF1FCEDE4BCE064</code> <code>A5BAAC3C986D07F70F14C5129073987D</code> <code>C0A0FFC9A06D06F0AE2D3EC09E2A3516</code> <code>A9BC8252F32F3635E8372CCDCBB40993</code><br> <code>2CE0C89C</code></td>
<td><code>FE5001009A3F05B76B4C210CA7F3F56A</code> <code>88EEAA86763C699D4D4CD3F6DCE1DDF5</code> <code>E1EEAD1EA6131546C389312D74289BF6</code> <code>7D020C74D8AACB336A9101396004C755</code> <code>8A87D9525C08A8599E02B63B7E23B049</code> <code>5A099E389DB2BF25AEC6AF4D7D7D3257</code> <code>558DD71E9141CC88BABB86F4ACA65574</code> <code>D18CF404B75E61F133B827DFAB845FBE</code> <code>824D3D2F5CFEF6E67A85E8E5BF4AC0CB</code> <code>1E81BB8408670D355AD972C8F1C78660</code> <code>2159962827360A64D00E49006B2C0852</code> <code>B387A8DA49C87AE5B2B0972F04B16CC0</code> <code>B5F6952524EB4EEDBF5B76F3A9A3CF8B</code> <code>AE87AD5CF8204E4E20A1878E46A536C4</code> <code>BC16430CB379D2D59DE922C2815751EC</code> <code>C532B7703A86C6086C638CE61391795F</code> <code>A56DF876758CDA328860275F9548980D</code> <code>30F7C935C19423B36478DF2905E20488</code> <code>4B5A77663F3495D9BC5E49BE58BBAAE8</code> <code>EF37A98A0284A2B7B7EE3CBA12A670F7</code> <code>739D3807FEC36950B167E0385C719F54</code><br> <code>845F51C2</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 = 81385541597C4EC39C0BB97921379FBC703CF214AD0A2F3A45DC11A5EAA191FDFB6DF4F857859E8327E441BD777E3C5119207985728092A1A64126C274BE1BD1D9861BE4F551AFD97FC35D968BBD2F57F3A714E9F6BA71A5682DE77C3EB506B47C9212142BADD2AED89FC5216F28628C050A70BFC5AA62D619177B66F5124765C2E757178E091F85489AAA193F5421B688445C24BF41A10327EFE74DBFC687F1E0DAD76A4FB73F8F290F809EC2DBD3D753757E509C92BFDADA7D21B82C8889D46BB44530DED401E2D4FAFA71FA6E351238DF59E89F3EE70ACD48FDC4846E9736C0816F9E5F1D7DD8E28D60AC4759883D9954F1F1A4F739DB96596A1BEB546B44</code></pre>
<pre><code>auth_key = 98FA1E08C3021458B8949CD48A3DFB4C434E18081B8E2F3C2669E491EBD35F07CAE6E2B386CDA8E43E2AC416F83CD6E01A7162E0849FD90471A6AE7E21147F2374239F71326CCD45E69086679162107283A7CAFD46AE40B130C8BB8425FACD31B39F84F7B8186A2E5E28ACBB4804C991231CC921FBE6F7EE92DF9B9A340E86EFA3CF7974C9DFCDEEA9102026C2A889F80804256913F301FFCD399E984E52D588714A2E13F1D63FCD75D5A4C34141AD8B4F3B924FD65FA65D2BD259C1403CFA657FFC23FDCB424B9FB75829FEFF0FD94B118F7BE41BDBC851E97D5FD03F8CC7901A844305C22BAF3353E58A69DB75702DAC0E959D826761463353541DA8200D8D</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 F0 EC 0E AF 31 8E 66
0010 | A8 00 00 00 34 F7 CB 3B 37 19 EC 38 7C E6 E1 47
0020 | C8 DE 55 74 1A 20 29 2D 71 7E C2 C2 6F 12 7B 54
0030 | 83 C4 A7 A3 55 A6 C6 AF 87 45 38 63 64 11 5A 44
0040 | C5 49 3B DE 39 B1 D7 A1</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 B8 AE 0B 1B B9 8E 66
0010 | 4C 00 00 00 34 F7 CB 3B E9 F0 C9 0B 74 FD 5E 4C
0020 | A8 67 C6 D1 75 FC E7 56 03 A2 27 40 6B 8B E9 CD
0030 | B4 A2 08 97 49 C8 05 C9 18 BF 8F 42 BF 66 AE 86
0040 | 19 0A 9B CC 01 D1 31 9F</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>01F0EC0EAF318E66</code></td>
<td><code>01B8AE0B1BB98E66</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>A8000000</code> (168 in decimal)</td>
<td><code>4C000000</code> (76 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>3719EC387CE6E147C8DE55741A20292D</code></td>
<td><code>E9F0C90B74FD5E4CA867C6D175FCE756</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>717EC2C26F127B5483C4A7A355A6C6AF</code></td>
<td><code>03A227406B8BE9CDB4A2089749C805C9</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce_hash1</td>
<td>56, 16</td>
<td><code>8745386364115A44C5493BDE39B1D7A1</code></td>
<td><code>18BF8F42BF66AE86190A9BCC01D1319F</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

@ -172,7 +172,7 @@
</tr>
<tr>
<td><a href="/method/channels.searchPosts">channels.searchPosts</a></td>
<td> </td>
<td>Globally search for posts from public <a href="/api/channel">channels »</a> (<em>including</em> those we aren't a member of) containing a specific hashtag.</td>
</tr>
</tbody>
</table></div>