Update content of files

This commit is contained in:
GitHub Action 2024-06-24 18:09:41 +00:00
parent 62e0b0c94d
commit 15431f8b1b
6 changed files with 218 additions and 223 deletions

View file

@ -122,14 +122,7 @@
<a href='/method/account.getGlobalPrivacySettings'>account.getGlobalPrivacySettings</a>#eb2b4cf6 = <a href='/type/GlobalPrivacySettings'>GlobalPrivacySettings</a>;
<a href='/method/account.setGlobalPrivacySettings'>account.setGlobalPrivacySettings</a>#1edaaac2 settings:<a href='/type/GlobalPrivacySettings'>GlobalPrivacySettings</a> = <a href='/type/GlobalPrivacySettings'>GlobalPrivacySettings</a>;</code></pre>
<p>Some global privacy settings can also be fetched and modified using <a href="/method/account.getGlobalPrivacySettings">account.getGlobalPrivacySettings</a> and <a href="/method/account.setGlobalPrivacySettings">account.setGlobalPrivacySettings</a>. </p>
<p>Global privacy settings are represented by the <a href="/constructor/globalPrivacySettings">globalPrivacySettings</a> constructor, that contains the following parameters:</p>
<ul>
<li><strong>archive_and_mute_new_noncontact_peers</strong> - Whether to archive and mute new chats from non-contacts.</li>
<li><strong>keep_archived_unmuted</strong> - Whether unmuted chats will be kept in the Archive chat list when they get a new message.</li>
<li><strong>keep_archived_folders</strong> - Whether unmuted chats that are always included or pinned in a <a href="/api/folders">folder</a>, will be kept in the Archive chat list when they get a new message. Ignored if <code>keep_archived_unmuted</code> is set. </li>
<li><strong>hide_read_marks</strong> - If set, users that cannot see our exact last online date due to the current value of the <a href="/constructor/inputPrivacyKeyStatusTimestamp">inputPrivacyKeyStatusTimestamp</a> key will receive a <code>403</code> <code>USER_PRIVACY_RESTRICTED</code> error when invoking <a href="/method/messages.getOutboxReadDate">messages.getOutboxReadDate</a> to fetch the exact read date of one of their messages. </li>
<li><strong>new_noncontact_peers_require_premium</strong> - If set, only users that have a premium account, are in our contact list, or already have a private chat with us can write to us privately; a <code>403</code> <code>PRIVACY_PREMIUM_REQUIRED</code> error will be emitted otherwise. The <a href="/constructor/userFull">userFull</a>.<code>contact_require_premium</code> flag will be set for users that have this flag enabled.</li>
</ul></div>
<p>Global privacy settings are represented by the <a href="/constructor/globalPrivacySettings">globalPrivacySettings</a> constructor, please see the <a href="/constructor/globalPrivacySettings">constructor page</a> for a full description of all settings.</p></div>
</div>

View file

@ -89,12 +89,12 @@
<tr>
<td><strong>hide_read_marks</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>If set, users that cannot see our exact last online date due to the current value of the <a href="/constructor/inputPrivacyKeyStatusTimestamp">inputPrivacyKeyStatusTimestamp</a> key will receive a <code>403</code> <code>USER_PRIVACY_RESTRICTED</code> error when invoking <a href="/method/messages.getOutboxReadDate">messages.getOutboxReadDate</a> to fetch the exact read date of one of their messages.</td>
<td>If set, users that cannot see <em>our</em> exact last online date due to the current value of the <a href="/constructor/inputPrivacyKeyStatusTimestamp">inputPrivacyKeyStatusTimestamp</a> key will receive a <code>403</code> <code>USER_PRIVACY_RESTRICTED</code> error when invoking <a href="/method/messages.getOutboxReadDate">messages.getOutboxReadDate</a> to fetch the exact read date of one of their messages. <br>The <a href="/constructor/userFull">userFull</a>.<code>read_dates_private</code> flag will be set for users that have this flag enabled.</td>
</tr>
<tr>
<td><strong>new_noncontact_peers_require_premium</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.4?<a href="/constructor/true">true</a></td>
<td>If set, only users that have a premium account, are in our contact list, or already have a private chat with us can write to us privately; a <code>403</code> <code>PRIVACY_PREMIUM_REQUIRED</code> error will be emitted otherwise. The <a href="/constructor/userFull">userFull</a>.<code>contact_require_premium</code> flag will be set for users that have this flag enabled.</td>
<td>If set, only users that have a premium account, are in our contact list, or already have a private chat with us can write to us privately; a <code>403</code> <code>PRIVACY_PREMIUM_REQUIRED</code> error will be emitted otherwise. <br>The <a href="/constructor/userFull">userFull</a>.<code>contact_require_premium</code> flag will be set for users that have this flag enabled. <br><a href="/api/premium">Premium</a> users only, non-Premium users will receive a <code>PREMIUM_ACCOUNT_REQUIRED</code> error when trying to enable this flag.</td>
</tr>
</tbody>
</table>
@ -107,7 +107,9 @@
<p>Whether people will be able to see your exact last online timestamp</p>
<h4><a class="anchor" href="#messagesgetoutboxreaddate" id="messagesgetoutboxreaddate" name="messagesgetoutboxreaddate"><i class="anchor-icon"></i></a><a href="/method/messages.getOutboxReadDate">messages.getOutboxReadDate</a></h4>
<h4><a class="anchor" href="#userfull" id="userfull" name="userfull"><i class="anchor-icon"></i></a><a href="/constructor/userFull">userFull</a></h4>
<p>Extended user info</p></div>
<p>Extended user info</p>
<h4><a class="anchor" href="#telegram-premium" id="telegram-premium" name="telegram-premium"><i class="anchor-icon"></i></a><a href="/api/premium">Telegram Premium</a></h4>
<p>Telegram Premium is an optional subscription service that unlocks additional exclusive client-side and API-side features, while helping support the development of the app.</p></div>
</div>

View file

@ -42,7 +42,8 @@
<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="/schema" >TL-schema</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/constructor/inputPrivacyKeyStatusTimestamp" >inputPrivacyKeyStatusTimestamp</a></li></ul></div>
<h1 id="dev_page_title">inputPrivacyKeyStatusTimestamp</h1>
<div id="dev_page_content"><p>Whether people will be able to see your exact last online timestamp</p>
<div id="dev_page_content"><p>Whether people will be able to see our exact last online timestamp. </p>
<p>Note that if <em>we</em> decide to hide our exact last online timestamp to someone <strong>and</strong> we do not have a <a href="/api/premium">Premium</a> subscription, we won't be able to see the exact last online timestamp of <em>any</em> user, including those that do share it with us. </p>
<p><div class="clearfix">
<ul class="dev_layer_select slightly-pull-right nav nav-pills">
<li class="dropdown">

View file

@ -42,7 +42,8 @@
<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="/schema" >TL-schema</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/constructor/privacyKeyStatusTimestamp" >privacyKeyStatusTimestamp</a></li></ul></div>
<h1 id="dev_page_title">privacyKeyStatusTimestamp</h1>
<div id="dev_page_content"><p>Whether we can see the last online timestamp of this user</p>
<div id="dev_page_content"><p>Whether we can see the last online timestamp of this user.</p>
<p>Note that if <em>we</em> decide to hide our exact last online timestamp to someone <strong>and</strong> we do not have a <a href="/api/premium">Premium</a> subscription, we won't be able to see the exact last online timestamp of <em>any</em> user, including those that do share it with us. </p>
<p><div class="clearfix">
<ul class="dev_layer_select slightly-pull-right nav nav-pills">
<li class="dropdown">

View file

@ -129,12 +129,12 @@
<tr>
<td><strong>contact_require_premium</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.29?<a href="/constructor/true">true</a></td>
<td>If set, we can only write to this user if we are subscribed to <a href="/api/premium">Telegram Premium</a>, or if they're a mutual contact (<a href="/constructor/user">user</a>.<code>mutual_contact</code>). <br>To set this flag for ourselves invoke <a href="/method/account.setGlobalPrivacySettings">account.setGlobalPrivacySettings</a>, setting the <code>settings.new_noncontact_peers_require_premium</code> flag.</td>
<td>If set, we can only write to this user if we already have a private chat with them, if we are subscribed to <a href="/api/premium">Telegram Premium</a>, or if they're a mutual contact (<a href="/constructor/user">user</a>.<code>mutual_contact</code>). <br>All the secondary conditions listed above must be checked separately to verify whether we can still write to the user, even if this flag is set (i.e. a mutual contact will have this flag set even if we can still write to them, and so on...). <br>To set this flag for ourselves invoke <a href="/method/account.setGlobalPrivacySettings">account.setGlobalPrivacySettings</a>, setting the <code>settings.new_noncontact_peers_require_premium</code> flag.</td>
</tr>
<tr>
<td><strong>read_dates_private</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.30?<a href="/constructor/true">true</a></td>
<td>If set, users that cannot see our exact last online date due to the current value of the <a href="/constructor/inputPrivacyKeyStatusTimestamp">inputPrivacyKeyStatusTimestamp</a> key will receive a <code>403</code> <code>USER_PRIVACY_RESTRICTED</code> error when invoking <a href="/method/messages.getOutboxReadDate">messages.getOutboxReadDate</a> to fetch the exact read date of one of their messages. <br>To set this flag for ourselves invoke <a href="/method/account.setGlobalPrivacySettings">account.setGlobalPrivacySettings</a>, setting the <code>settings.hide_read_marks</code> flag.</td>
<td>If set, we cannot fetch the exact read date of messages we send to this user using <a href="/method/messages.getOutboxReadDate">messages.getOutboxReadDate</a>. <br>To set this flag for ourselves invoke <a href="/method/account.setGlobalPrivacySettings">account.setGlobalPrivacySettings</a>, setting the <code>settings.hide_read_marks</code> flag.</td>
</tr>
<tr>
<td><strong>flags2</strong></td>
@ -304,8 +304,6 @@
<p>Indicates info about a certain user</p>
<h4><a class="anchor" href="#accountsetglobalprivacysettings" id="accountsetglobalprivacysettings" name="accountsetglobalprivacysettings"><i class="anchor-icon"></i></a><a href="/method/account.setGlobalPrivacySettings">account.setGlobalPrivacySettings</a></h4>
<p>Set global privacy settings</p>
<h4><a class="anchor" href="#inputprivacykeystatustimestamp" id="inputprivacykeystatustimestamp" name="inputprivacykeystatustimestamp"><i class="anchor-icon"></i></a><a href="/constructor/inputPrivacyKeyStatusTimestamp">inputPrivacyKeyStatusTimestamp</a></h4>
<p>Whether people will be able to see your exact last online timestamp</p>
<h4><a class="anchor" href="#messagesgetoutboxreaddate" id="messagesgetoutboxreaddate" name="messagesgetoutboxreaddate"><i class="anchor-icon"></i></a><a href="/method/messages.getOutboxReadDate">messages.getOutboxReadDate</a></h4>
<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>

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 6A 0A 00 98 A7 79 66
0010 | 14 00 00 00 F1 8E 7E BE D4 5A 10 48 DD 54 2C EB
0020 | 93 BA F4 1E 88 DE 4B 74</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 A8 00 05 00 9F AB 79 66
0010 | 14 00 00 00 F1 8E 7E BE DC 03 79 0F D6 11 07 EB
0020 | DA D1 63 40 B3 50 31 08</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>B86A0A0098A77966</code></td>
<td><code>A80005009FAB7966</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>D45A1048DD542CEB93BAF41E88DE4B74</code></td>
<td><code>DC03790FD61107EBDAD16340B3503108</code></td>
<td>Random number</td>
</tr>
</tbody>
@ -104,11 +104,11 @@
<h5><a class="anchor" href="#2-server-sends-response-of-the-form" id="2-server-sends-response-of-the-form" name="2-server-sends-response-of-the-form"><i class="anchor-icon"></i></a>2) Server sends response of the form</h5>
<!-- start resPQ -->
<p>Received payload (excluding transport headers/trailers):</p>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 30 E0 AC 98 A7 79 66
0010 | C4 00 00 00 63 24 16 05 D4 5A 10 48 DD 54 2C EB
0020 | 93 BA F4 1E 88 DE 4B 74 C5 37 7C D6 91 F8 CE DD
0030 | 36 3D 8F C7 FE DF 3D 7B 08 16 86 37 77 EE 8D 1E
0040 | C3 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 50 C2 5B 9F AB 79 66
0010 | CC 00 00 00 63 24 16 05 DC 03 79 0F D6 11 07 EB
0020 | DA D1 63 40 B3 50 31 08 72 4C D0 AA 73 D7 52 78
0030 | 68 1C 2C 3B 5C AD 94 70 08 1A 1B DA FF 6A CD B1
0040 | 9B 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>0130E0AC98A77966</code></td>
<td><code>0150C25B9FAB7966</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>C4000000</code> (196 in decimal)</td>
<td><code>CC000000</code> (204 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -150,19 +150,19 @@
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>D45A1048DD542CEB93BAF41E88DE4B74</code></td>
<td><code>DC03790FD61107EBDAD16340B3503108</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>C5377CD691F8CEDD363D8FC7FEDF3D7B</code></td>
<td><code>724CD0AA73D75278681C2C3B5CAD9470</code></td>
<td>Server-generated random number</td>
</tr>
<tr>
<td>pq</td>
<td>56, 12</td>
<td><code>0816863777EE8D1EC3000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1623045703956504259</td>
<td><code>081A1BDAFF6ACDB19B000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1881338059900694939</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 = 1623045703956504259</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>1623045703956504259 = 1013887393 * 1600814563</code></p>
<pre><code>p = 1013887393
q = 1600814563</code></pre>
<pre><code>pq = 1881338059900694939</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>1881338059900694939 = 1259433179 * 1493797441</code></p>
<pre><code>p = 1259433179
q = 1493797441</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 86 37 77 EE 8D 1E C3 00 00 00
0010 | 04 3C 6E B1 A1 00 00 00 04 5F 6A 7D E3 00 00 00
0020 | D4 5A 10 48 DD 54 2C EB 93 BA F4 1E 88 DE 4B 74
0030 | C5 37 7C D6 91 F8 CE DD 36 3D 8F C7 FE DF 3D 7B
0040 | 93 B1 FF C5 FC A2 3E 19 7E 12 4D 71 33 9C E3 34
0050 | 2D C0 02 D8 1B 4E 23 9A DE 75 45 95 25 C0 D5 1E
<pre><code>0000 | 95 5F F5 A9 08 1A 1B DA FF 6A CD B1 9B 00 00 00
0010 | 04 4B 11 6C DB 00 00 00 04 59 09 8A 41 00 00 00
0020 | DC 03 79 0F D6 11 07 EB DA D1 63 40 B3 50 31 08
0030 | 72 4C D0 AA 73 D7 52 78 68 1C 2C 3B 5C AD 94 70
0040 | C6 48 77 DB 05 BF 92 BD 5A 36 57 1B 9B D0 13 C7
0050 | C6 1D 5F 42 29 FA 5A 14 84 7F B3 15 1E 80 6E 5F
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 = 1600814563</code></pre>
<tr>
<td>pq</td>
<td>4, 12</td>
<td><code>0816863777EE8D1EC3000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1623045703956504259</td>
<td><code>081A1BDAFF6ACDB19B000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1881338059900694939</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>043C6EB1A1000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1013887393</td>
<td><code>044B116CDB000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1259433179</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>045F6A7DE3000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1600814563</td>
<td><code>0459098A41000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1493797441</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>D45A1048DD542CEB93BAF41E88DE4B74</code></td>
<td><code>DC03790FD61107EBDAD16340B3503108</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>48, 16</td>
<td><code>C5377CD691F8CEDD363D8FC7FEDF3D7B</code></td>
<td><code>724CD0AA73D75278681C2C3B5CAD9470</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce</td>
<td>64, 32</td>
<td><code>93B1FFC5FCA23E197E124D71339CE334</code> <code>2DC002D81B4E239ADE75459525C0D51E</code></td>
<td><code>C64877DB05BF92BD5A36571B9BD013C7</code> <code>C61D5F4229FA5A14847FB3151E806E5F</code></td>
<td>Client-generated random number</td>
</tr>
<tr>
@ -291,39 +291,39 @@ q = 1600814563</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 = 955FF5A90816863777EE8D1EC3000000043C6EB1A1000000045F6A7DE3000000D45A1048DD542CEB93BAF41E88DE4B74C5377CD691F8CEDD363D8FC7FEDF3D7B93B1FFC5FCA23E197E124D71339CE3342DC002D81B4E239ADE75459525C0D51E02000000
random_padding_bytes = 44A6E0B1FA5F5E5CE010D882A40B698476C112F26322D44CBC93FD2B99CBAF1BA2EFEB033085ECBCA520CB8B8F305441DD8776CBB8B3230BB767F6E52C4CC6CF65C28A942F4CBF979394D3B42AFDD92A186379568186F2B14C75BD4F</code></pre>
<pre><code>data = 955FF5A9081A1BDAFF6ACDB19B000000044B116CDB0000000459098A41000000DC03790FD61107EBDAD16340B3503108724CD0AA73D75278681C2C3B5CAD9470C64877DB05BF92BD5A36571B9BD013C7C61D5F4229FA5A14847FB3151E806E5F02000000
random_padding_bytes = E69D178D60E6F09242E53331F41319B94357AA58142D9A03D1645C5B9E6AFCFF0E2704CF36BC9BF82F36BD095CE2653FAA34F5CC864A1AE9F9ADF5A66A4E8C156D03DA0F3AC4A9E59FA15B5C417B8DC8BB7C559FA27D40F0D0A669B6</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 = 51A4C35E1001399E2D3D0BB0E27E0EE873D637E6FFB369852F942E768A7B13DB4DD3CF95AFDC047411AF6F7D84083554E5CB84B231CB8C994B7132DB92CDF1547C69148B6E94D72D0A6D41E943BAA93F1E114FBC3859FD0525C5952B5A61821645ECFC9E38A4363EA9FF9A9D7EE90F3A1374F40D27BA2214C9BE9F2422F0AC28FDD11F96C10E59909E43F0BCF7B10C253210A014F6E9E647EB078D147377270CFD83487A7138A988EA3C5EE521C30F684A85FD821B0C44A1974B40A619CBB8B3B421DBF1B0BEB1105815B555EC505CF3C08401F4D087BB3752145B0F17F401125414E4EDEBDCA06CA9D96CA18B9CBE00B395706C5E57BB2EFB5CA8E8FB1C2C7B</code></pre>
<pre><code>encrypted_data = 16F9CA56227918A7C8104EA086F7BA3052C9EBCE693D1C173C7825465E9A8A7F10E94781E554DDD5C752EC28F0DFB3922328EF2251B6F61EB2D7639BB36A95B7965C3EDC4BC8D0C49E8A2E364AB8DE1532AE6311F6BB80FBA2B47CDD1B4AB3CFEAC588AE0BED004F610B59BBC3E502E488CC3678DBCD727BC8C472F753D309FCBA73A48F94740C1202764C9DFA68A176326B43125CB57634C5D255CDFD541C769E5A7C82E217BD9ADC8C20D3E414E0030D2329BB6F57D13D318D8D325CA5117433C3C112624080D9B6834D6E8831C3141971DB6CB7A1C23CDFB01E9B8D9CF2ADA5BACA01B7C7B27BD69D8B11989A7D66548CE010390330D3EBEC19E04DD76248</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 4C 11 0D 00 98 A7 79 66
0010 | 40 01 00 00 BE E4 12 D7 D4 5A 10 48 DD 54 2C EB
0020 | 93 BA F4 1E 88 DE 4B 74 C5 37 7C D6 91 F8 CE DD
0030 | 36 3D 8F C7 FE DF 3D 7B 04 3C 6E B1 A1 00 00 00
0040 | 04 5F 6A 7D E3 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 51 A4 C3 5E 10 01 39 9E 2D 3D 0B B0
0060 | E2 7E 0E E8 73 D6 37 E6 FF B3 69 85 2F 94 2E 76
0070 | 8A 7B 13 DB 4D D3 CF 95 AF DC 04 74 11 AF 6F 7D
0080 | 84 08 35 54 E5 CB 84 B2 31 CB 8C 99 4B 71 32 DB
0090 | 92 CD F1 54 7C 69 14 8B 6E 94 D7 2D 0A 6D 41 E9
00A0 | 43 BA A9 3F 1E 11 4F BC 38 59 FD 05 25 C5 95 2B
00B0 | 5A 61 82 16 45 EC FC 9E 38 A4 36 3E A9 FF 9A 9D
00C0 | 7E E9 0F 3A 13 74 F4 0D 27 BA 22 14 C9 BE 9F 24
00D0 | 22 F0 AC 28 FD D1 1F 96 C1 0E 59 90 9E 43 F0 BC
00E0 | F7 B1 0C 25 32 10 A0 14 F6 E9 E6 47 EB 07 8D 14
00F0 | 73 77 27 0C FD 83 48 7A 71 38 A9 88 EA 3C 5E E5
0100 | 21 C3 0F 68 4A 85 FD 82 1B 0C 44 A1 97 4B 40 A6
0110 | 19 CB B8 B3 B4 21 DB F1 B0 BE B1 10 58 15 B5 55
0120 | EC 50 5C F3 C0 84 01 F4 D0 87 BB 37 52 14 5B 0F
0130 | 17 F4 01 12 54 14 E4 ED EB DC A0 6C A9 D9 6C A1
0140 | 8B 9C BE 00 B3 95 70 6C 5E 57 BB 2E FB 5C A8 E8
0150 | FB 1C 2C 7B</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 50 B8 0A 00 9F AB 79 66
0010 | 40 01 00 00 BE E4 12 D7 DC 03 79 0F D6 11 07 EB
0020 | DA D1 63 40 B3 50 31 08 72 4C D0 AA 73 D7 52 78
0030 | 68 1C 2C 3B 5C AD 94 70 04 4B 11 6C DB 00 00 00
0040 | 04 59 09 8A 41 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 16 F9 CA 56 22 79 18 A7 C8 10 4E A0
0060 | 86 F7 BA 30 52 C9 EB CE 69 3D 1C 17 3C 78 25 46
0070 | 5E 9A 8A 7F 10 E9 47 81 E5 54 DD D5 C7 52 EC 28
0080 | F0 DF B3 92 23 28 EF 22 51 B6 F6 1E B2 D7 63 9B
0090 | B3 6A 95 B7 96 5C 3E DC 4B C8 D0 C4 9E 8A 2E 36
00A0 | 4A B8 DE 15 32 AE 63 11 F6 BB 80 FB A2 B4 7C DD
00B0 | 1B 4A B3 CF EA C5 88 AE 0B ED 00 4F 61 0B 59 BB
00C0 | C3 E5 02 E4 88 CC 36 78 DB CD 72 7B C8 C4 72 F7
00D0 | 53 D3 09 FC BA 73 A4 8F 94 74 0C 12 02 76 4C 9D
00E0 | FA 68 A1 76 32 6B 43 12 5C B5 76 34 C5 D2 55 CD
00F0 | FD 54 1C 76 9E 5A 7C 82 E2 17 BD 9A DC 8C 20 D3
0100 | E4 14 E0 03 0D 23 29 BB 6F 57 D1 3D 31 8D 8D 32
0110 | 5C A5 11 74 33 C3 C1 12 62 40 80 D9 B6 83 4D 6E
0120 | 88 31 C3 14 19 71 DB 6C B7 A1 C2 3C DF B0 1E 9B
0130 | 8D 9C F2 AD A5 BA CA 01 B7 C7 B2 7B D6 9D 8B 11
0140 | 98 9A 7D 66 54 8C E0 10 39 03 30 D3 EB EC 19 E0
0150 | 4D D7 62 48</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 = 44A6E0B1FA5F5E5CE010D882A40B698476C112F26322D44CBC93FD2B9
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>4C110D0098A77966</code></td>
<td><code>50B80A009FAB7966</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 = 44A6E0B1FA5F5E5CE010D882A40B698476C112F26322D44CBC93FD2B9
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>D45A1048DD542CEB93BAF41E88DE4B74</code></td>
<td><code>DC03790FD61107EBDAD16340B3503108</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>C5377CD691F8CEDD363D8FC7FEDF3D7B</code></td>
<td><code>724CD0AA73D75278681C2C3B5CAD9470</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>p</td>
<td>56, 8</td>
<td><code>043C6EB1A1000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1013887393</td>
<td><code>044B116CDB000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1259433179</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>045F6A7DE3000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1600814563</td>
<td><code>0459098A41000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1493797441</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 = 44A6E0B1FA5F5E5CE010D882A40B698476C112F26322D44CBC93FD2B9
<tr>
<td>encrypted_data</td>
<td>80, 260</td>
<td><code>FE00010051A4C35E1001399E2D3D0BB0</code> <code>E27E0EE873D637E6FFB369852F942E76</code> <code>8A7B13DB4DD3CF95AFDC047411AF6F7D</code> <code>84083554E5CB84B231CB8C994B7132DB</code> <code>92CDF1547C69148B6E94D72D0A6D41E9</code> <code>43BAA93F1E114FBC3859FD0525C5952B</code> <code>5A61821645ECFC9E38A4363EA9FF9A9D</code> <code>7EE90F3A1374F40D27BA2214C9BE9F24</code> <code>22F0AC28FDD11F96C10E59909E43F0BC</code> <code>F7B10C253210A014F6E9E647EB078D14</code> <code>7377270CFD83487A7138A988EA3C5EE5</code> <code>21C30F684A85FD821B0C44A1974B40A6</code> <code>19CBB8B3B421DBF1B0BEB1105815B555</code> <code>EC505CF3C08401F4D087BB3752145B0F</code> <code>17F401125414E4EDEBDCA06CA9D96CA1</code> <code>8B9CBE00B395706C5E57BB2EFB5CA8E8</code><br> <code>FB1C2C7B</code></td>
<td><code>FE00010016F9CA56227918A7C8104EA0</code> <code>86F7BA3052C9EBCE693D1C173C782546</code> <code>5E9A8A7F10E94781E554DDD5C752EC28</code> <code>F0DFB3922328EF2251B6F61EB2D7639B</code> <code>B36A95B7965C3EDC4BC8D0C49E8A2E36</code> <code>4AB8DE1532AE6311F6BB80FBA2B47CDD</code> <code>1B4AB3CFEAC588AE0BED004F610B59BB</code> <code>C3E502E488CC3678DBCD727BC8C472F7</code> <code>53D309FCBA73A48F94740C1202764C9D</code> <code>FA68A176326B43125CB57634C5D255CD</code> <code>FD541C769E5A7C82E217BD9ADC8C20D3</code> <code>E414E0030D2329BB6F57D13D318D8D32</code> <code>5CA5117433C3C112624080D9B6834D6E</code> <code>8831C3141971DB6CB7A1C23CDFB01E9B</code> <code>8D9CF2ADA5BACA01B7C7B27BD69D8B11</code> <code>989A7D66548CE010390330D3EBEC19E0</code><br> <code>4DD76248</code></td>
<td>Value generated above</td>
</tr>
</tbody>
@ -402,47 +402,47 @@ random_padding_bytes = 44A6E0B1FA5F5E5CE010D882A40B698476C112F26322D44CBC93FD2B9
<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 E0 0C 5E 99 A7 79 66
0010 | 9C 02 00 00 5C 07 E8 D0 D4 5A 10 48 DD 54 2C EB
0020 | 93 BA F4 1E 88 DE 4B 74 C5 37 7C D6 91 F8 CE DD
0030 | 36 3D 8F C7 FE DF 3D 7B FE 50 02 00 E5 D3 3B 92
0040 | D0 77 08 03 3C B6 36 3F FF CF E1 F7 61 3A 25 95
0050 | FF 75 CC 40 AD 0B DE A4 8E E5 77 F6 43 E9 29 90
0060 | D4 A8 AB 1E C6 64 C9 E5 73 7E 26 30 A3 D2 60 EA
0070 | 25 B9 42 A6 55 E0 EE EA 5E DF 72 FA 6C 81 1B 82
0080 | AF 52 BD 43 6A C4 D5 73 03 2D 27 98 0B 6B AD 43
0090 | 48 5E 2F A9 B1 27 EE F2 16 05 66 1B 30 6B CD 91
00A0 | A4 29 90 07 FB 8D 1F D3 57 DD EE 2B 58 D9 0B EF
00B0 | 5D 48 C6 F2 D2 16 C5 56 75 8B 96 BC 9B 09 9B FF
00C0 | 85 AD 7C E5 D4 FE 02 87 9A 27 1C 41 5E 70 E6 00
00D0 | 23 65 DD 49 4F 66 D3 DF AA 4B 4A E8 9A 94 74 73
00E0 | 3B 04 4A 4B CE 82 C1 DC 51 15 F0 4B E1 3C DF 2F
00F0 | 40 78 CC 6F 41 5A 48 48 E9 53 58 B7 6F F4 89 24
0100 | 19 38 90 24 72 9C 53 F9 0B D5 B0 0A A7 21 5B 64
0110 | 8D A2 78 7D A8 1D 2B A6 83 2B E9 94 8E 5C 91 78
0120 | 1E 99 45 49 1B 00 46 CB FB 5F D4 9F 84 48 A3 7B
0130 | 4D 9A 0B A5 BB 1D 62 94 26 94 B3 E7 60 9D FD 00
0140 | 06 39 47 09 33 34 68 EB 3E FB E7 7B 35 C2 2F 24
0150 | 8C 21 62 FA 23 DD 96 D3 CE 7F D5 16 C4 15 28 BB
0160 | 00 A3 1F EF A6 90 BB F7 63 08 69 68 F5 55 77 CF
0170 | E9 A5 44 99 C5 38 B6 E9 21 65 AF 8E 48 28 C3 A6
0180 | 7C 5F 3B 9E 37 A5 E9 82 3C 53 32 E3 DD AA D4 19
0190 | F6 13 11 B4 B7 15 B2 86 BE 0A 68 5C 73 8E 48 2A
01A0 | 6F CC 0A E2 DB 9B 69 84 09 1A CE 08 EF 54 FD 5B
01B0 | 03 87 96 92 8C 8C EB B7 A6 BD 3E 47 1D 78 AB F3
01C0 | 2A 80 DB 17 73 E2 CD 06 78 CB FB 39 89 64 C3 5F
01D0 | B1 3F 37 9D 60 14 CC 66 C5 4D 60 0B 04 CD 4F 79
01E0 | 5D B4 41 5F FA 06 F3 B5 5F E8 19 FD 7D A0 D8 EA
01F0 | 56 3C 01 BF 8D 35 71 29 97 A6 EB 8F E3 C9 AD A0
0200 | 07 03 94 82 6A BE A9 BA E4 3E 92 3E 85 A3 3C EA
0210 | 8F A8 2A B5 0D FF 62 42 82 C3 B1 D6 3D 65 81 62
0220 | 4F 62 79 84 25 35 56 01 60 52 8C 76 80 46 83 83
0230 | 09 81 4D 2F 66 69 09 62 3D 84 D3 00 61 EC F9 55
0240 | 02 2B A5 5A 41 E0 4F 69 01 A8 3D 6C 15 2D CB 07
0250 | 87 5C CD 13 BB CF 30 FD 01 48 3D E8 AB C0 3F A6
0260 | 1C 55 E3 C7 5A D9 90 1E BB A8 FA 8C 61 BF 04 DA
0270 | 0F 8F 61 EB E3 48 89 02 43 CE D5 DB 75 9A 99 65
0280 | EB 06 61 08 3E 11 90 FA 4F 5C BF 23</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 E4 D7 22 A0 AB 79 66
0010 | C8 02 00 00 5C 07 E8 D0 DC 03 79 0F D6 11 07 EB
0020 | DA D1 63 40 B3 50 31 08 72 4C D0 AA 73 D7 52 78
0030 | 68 1C 2C 3B 5C AD 94 70 FE 50 02 00 7F C3 E7 70
0040 | 13 CA 10 D2 B2 34 E1 21 9E C1 2B 0B 9B CB 8F A7
0050 | 58 46 41 42 BD 4B FF 46 68 22 0D 25 3E AC E9 44
0060 | EC 81 17 60 15 BC E6 B8 FB 1A C2 C0 9C 99 6B E9
0070 | EE 5D 5B F2 91 BF 51 B4 4A 10 B8 1D 2D 56 57 91
0080 | A8 9E C5 34 A6 A1 53 A4 FF F4 3F 48 39 AE 00 5F
0090 | B8 8B E4 20 53 C7 D8 62 3D 80 01 4C 6F CD E4 06
00A0 | 16 28 67 7E 6F A6 F9 F8 0D 31 EE 28 9D 73 C5 86
00B0 | 05 CF 46 35 94 FB 3A C5 DB 4E 78 B9 57 1C ED 33
00C0 | 8F FE E2 68 EE FB 3D 58 20 B2 E7 92 63 DD 1E F3
00D0 | 0F 31 0B A1 91 56 C8 5E 04 72 61 E5 22 E5 89 D7
00E0 | 10 04 B8 D2 B5 76 C9 A7 8E 82 BF 62 06 28 84 82
00F0 | EB 1D 70 8B 73 91 3F 06 F0 4A 72 58 BA DD 56 7F
0100 | 68 A3 3D 3B 63 FC 60 10 45 8F 69 07 66 87 27 3B
0110 | 8D EF DA CC B7 10 AE 53 BA 1E A5 95 01 AC BD CF
0120 | C2 B8 EC D0 33 8C D3 C6 BF 8B 79 7D 31 1C 49 28
0130 | 27 22 AA 8B AA DC 97 C5 F8 B9 B3 69 C7 B0 D1 B8
0140 | F9 B9 4F 86 75 BE 3B 64 5A 83 DA B8 4D A5 F0 62
0150 | 49 B3 0B A1 48 1E 93 FF 21 6A 09 84 B5 E3 05 2C
0160 | 56 7F 2F 71 6E 4E B0 E7 C9 1B 15 CD 44 1D 70 FB
0170 | D0 B7 38 9A E3 F6 D4 D2 FE 4F 5B 0B E8 83 27 6C
0180 | C3 14 B6 C2 E0 50 D4 DE FE 1C C3 6B 66 BA 2D 87
0190 | 13 9A 85 CC 82 65 B7 73 08 B7 C8 63 2D E9 4C 43
01A0 | 89 08 B7 30 88 0F 71 A9 C6 16 68 74 4A 13 FC 87
01B0 | 69 74 10 40 7B 28 97 F0 A4 65 B0 DD B0 F4 91 77
01C0 | AC 31 35 79 C1 07 9A 56 5E 76 CB 81 23 3F 64 8D
01D0 | D9 89 11 E9 AA B5 C7 6D E2 20 CA DC F3 8C 1A 29
01E0 | 74 3A 4B AC 0E 3F C1 07 CC D6 8D EE 66 EF E4 D1
01F0 | 5C 77 46 82 DC 44 90 A8 61 66 9A 6B 13 0D A9 7B
0200 | 13 32 AE 17 5C 1C 96 B4 77 73 B2 E7 29 73 65 66
0210 | C1 D7 6F 38 F7 AD 1A 93 65 59 74 99 4E 48 5E 9F
0220 | 6D BC 50 09 67 D4 EF 6A CD 05 FF 76 FC EB 4C 41
0230 | DB 3B 3C 78 09 62 E1 5A 6E 84 73 F5 A5 58 93 8D
0240 | 86 CF AF 18 40 A0 AA 5A EB B4 B6 C7 A4 DF 5E 11
0250 | AF CF AD 09 BF E1 5F A4 88 39 72 FA 46 C2 95 9B
0260 | 62 4A 51 8B BF D0 7D 1A E8 2D 29 45 60 D3 23 90
0270 | BA 30 BF C3 CD 0D 2F 3A 26 20 9A C4 67 85 39 48
0280 | F6 FF CA B4 5F EC 0E 29 5E 64 CE B6</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 = 44A6E0B1FA5F5E5CE010D882A40B698476C112F26322D44CBC93FD2B9
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>01E00C5E99A77966</code></td>
<td><code>01E4D722A0AB7966</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>9C020000</code> (668 in decimal)</td>
<td><code>C8020000</code> (712 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -482,19 +482,19 @@ random_padding_bytes = 44A6E0B1FA5F5E5CE010D882A40B698476C112F26322D44CBC93FD2B9
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>D45A1048DD542CEB93BAF41E88DE4B74</code></td>
<td><code>DC03790FD61107EBDAD16340B3503108</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>C5377CD691F8CEDD363D8FC7FEDF3D7B</code></td>
<td><code>724CD0AA73D75278681C2C3B5CAD9470</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_answer</td>
<td>56, 596</td>
<td><code>FE500200E5D33B92D07708033CB6363F</code> <code>FFCFE1F7613A2595FF75CC40AD0BDEA4</code> <code>8EE577F643E92990D4A8AB1EC664C9E5</code> <code>737E2630A3D260EA25B942A655E0EEEA</code> <code>5EDF72FA6C811B82AF52BD436AC4D573</code> <code>032D27980B6BAD43485E2FA9B127EEF2</code> <code>1605661B306BCD91A4299007FB8D1FD3</code> <code>57DDEE2B58D90BEF5D48C6F2D216C556</code> <code>758B96BC9B099BFF85AD7CE5D4FE0287</code> <code>9A271C415E70E6002365DD494F66D3DF</code> <code>AA4B4AE89A9474733B044A4BCE82C1DC</code> <code>5115F04BE13CDF2F4078CC6F415A4848</code> <code>E95358B76FF4892419389024729C53F9</code> <code>0BD5B00AA7215B648DA2787DA81D2BA6</code> <code>832BE9948E5C91781E9945491B0046CB</code> <code>FB5FD49F8448A37B4D9A0BA5BB1D6294</code> <code>2694B3E7609DFD0006394709333468EB</code> <code>3EFBE77B35C22F248C2162FA23DD96D3</code> <code>CE7FD516C41528BB00A31FEFA690BBF7</code> <code>63086968F55577CFE9A54499C538B6E9</code> <code>2165AF8E4828C3A67C5F3B9E37A5E982</code> <code>3C5332E3DDAAD419F61311B4B715B286</code> <code>BE0A685C738E482A6FCC0AE2DB9B6984</code> <code>091ACE08EF54FD5B038796928C8CEBB7</code> <code>A6BD3E471D78ABF32A80DB1773E2CD06</code> <code>78CBFB398964C35FB13F379D6014CC66</code> <code>C54D600B04CD4F795DB4415FFA06F3B5</code> <code>5FE819FD7DA0D8EA563C01BF8D357129</code> <code>97A6EB8FE3C9ADA0070394826ABEA9BA</code> <code>E43E923E85A33CEA8FA82AB50DFF6242</code> <code>82C3B1D63D6581624F62798425355601</code> <code>60528C768046838309814D2F66690962</code> <code>3D84D30061ECF955022BA55A41E04F69</code> <code>01A83D6C152DCB07875CCD13BBCF30FD</code> <code>01483DE8ABC03FA61C55E3C75AD9901E</code> <code>BBA8FA8C61BF04DA0F8F61EBE3488902</code> <code>43CED5DB759A9965EB0661083E1190FA</code><br> <code>4F5CBF23</code></td>
<td><code>FE5002007FC3E77013CA10D2B234E121</code> <code>9EC12B0B9BCB8FA758464142BD4BFF46</code> <code>68220D253EACE944EC81176015BCE6B8</code> <code>FB1AC2C09C996BE9EE5D5BF291BF51B4</code> <code>4A10B81D2D565791A89EC534A6A153A4</code> <code>FFF43F4839AE005FB88BE42053C7D862</code> <code>3D80014C6FCDE4061628677E6FA6F9F8</code> <code>0D31EE289D73C58605CF463594FB3AC5</code> <code>DB4E78B9571CED338FFEE268EEFB3D58</code> <code>20B2E79263DD1EF30F310BA19156C85E</code> <code>047261E522E589D71004B8D2B576C9A7</code> <code>8E82BF6206288482EB1D708B73913F06</code> <code>F04A7258BADD567F68A33D3B63FC6010</code> <code>458F69076687273B8DEFDACCB710AE53</code> <code>BA1EA59501ACBDCFC2B8ECD0338CD3C6</code> <code>BF8B797D311C49282722AA8BAADC97C5</code> <code>F8B9B369C7B0D1B8F9B94F8675BE3B64</code> <code>5A83DAB84DA5F06249B30BA1481E93FF</code> <code>216A0984B5E3052C567F2F716E4EB0E7</code> <code>C91B15CD441D70FBD0B7389AE3F6D4D2</code> <code>FE4F5B0BE883276CC314B6C2E050D4DE</code> <code>FE1CC36B66BA2D87139A85CC8265B773</code> <code>08B7C8632DE94C438908B730880F71A9</code> <code>C61668744A13FC87697410407B2897F0</code> <code>A465B0DDB0F49177AC313579C1079A56</code> <code>5E76CB81233F648DD98911E9AAB5C76D</code> <code>E220CADCF38C1A29743A4BAC0E3FC107</code> <code>CCD68DEE66EFE4D15C774682DC4490A8</code> <code>61669A6B130DA97B1332AE175C1C96B4</code> <code>7773B2E729736566C1D76F38F7AD1A93</code> <code>655974994E485E9F6DBC500967D4EF6A</code> <code>CD05FF76FCEB4C41DB3B3C780962E15A</code> <code>6E8473F5A558938D86CFAF1840A0AA5A</code> <code>EBB4B6C7A4DF5E11AFCFAD09BFE15FA4</code> <code>883972FA46C2959B624A518BBFD07D1A</code> <code>E82D294560D32390BA30BFC3CD0D2F3A</code> <code>26209AC467853948F6FFCAB45FEC0E29</code><br> <code>5E64CEB6</code></td>
<td>See below</td>
</tr>
</tbody>
@ -502,20 +502,20 @@ random_padding_bytes = 44A6E0B1FA5F5E5CE010D882A40B698476C112F26322D44CBC93FD2B9
<!-- 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 = E5D33B92D07708033CB6363FFFCFE1F7613A2595FF75CC40AD0BDEA48EE577F643E92990D4A8AB1EC664C9E5737E2630A3D260EA25B942A655E0EEEA5EDF72FA6C811B82AF52BD436AC4D573032D27980B6BAD43485E2FA9B127EEF21605661B306BCD91A4299007FB8D1FD357DDEE2B58D90BEF5D48C6F2D216C556758B96BC9B099BFF85AD7CE5D4FE02879A271C415E70E6002365DD494F66D3DFAA4B4AE89A9474733B044A4BCE82C1DC5115F04BE13CDF2F4078CC6F415A4848E95358B76FF4892419389024729C53F90BD5B00AA7215B648DA2787DA81D2BA6832BE9948E5C91781E9945491B0046CBFB5FD49F8448A37B4D9A0BA5BB1D62942694B3E7609DFD0006394709333468EB3EFBE77B35C22F248C2162FA23DD96D3CE7FD516C41528BB00A31FEFA690BBF763086968F55577CFE9A54499C538B6E92165AF8E4828C3A67C5F3B9E37A5E9823C5332E3DDAAD419F61311B4B715B286BE0A685C738E482A6FCC0AE2DB9B6984091ACE08EF54FD5B038796928C8CEBB7A6BD3E471D78ABF32A80DB1773E2CD0678CBFB398964C35FB13F379D6014CC66C54D600B04CD4F795DB4415FFA06F3B55FE819FD7DA0D8EA563C01BF8D35712997A6EB8FE3C9ADA0070394826ABEA9BAE43E923E85A33CEA8FA82AB50DFF624282C3B1D63D6581624F6279842535560160528C768046838309814D2F666909623D84D30061ECF955022BA55A41E04F6901A83D6C152DCB07875CCD13BBCF30FD01483DE8ABC03FA61C55E3C75AD9901EBBA8FA8C61BF04DA0F8F61EBE348890243CED5DB759A9965EB0661083E1190FA4F5CBF23
tmp_aes_key = B6DCA375BD1FBCB35C5DC4AC99AF7BEEA45A673F832B617967231EB190E8344E
tmp_aes_iv = DD4D80EFB531616F749D717D8D556794F655938F3D1942FDFDA6EE4693B1FFC5</code></pre>
<pre><code>encrypted_answer = 7FC3E77013CA10D2B234E1219EC12B0B9BCB8FA758464142BD4BFF4668220D253EACE944EC81176015BCE6B8FB1AC2C09C996BE9EE5D5BF291BF51B44A10B81D2D565791A89EC534A6A153A4FFF43F4839AE005FB88BE42053C7D8623D80014C6FCDE4061628677E6FA6F9F80D31EE289D73C58605CF463594FB3AC5DB4E78B9571CED338FFEE268EEFB3D5820B2E79263DD1EF30F310BA19156C85E047261E522E589D71004B8D2B576C9A78E82BF6206288482EB1D708B73913F06F04A7258BADD567F68A33D3B63FC6010458F69076687273B8DEFDACCB710AE53BA1EA59501ACBDCFC2B8ECD0338CD3C6BF8B797D311C49282722AA8BAADC97C5F8B9B369C7B0D1B8F9B94F8675BE3B645A83DAB84DA5F06249B30BA1481E93FF216A0984B5E3052C567F2F716E4EB0E7C91B15CD441D70FBD0B7389AE3F6D4D2FE4F5B0BE883276CC314B6C2E050D4DEFE1CC36B66BA2D87139A85CC8265B77308B7C8632DE94C438908B730880F71A9C61668744A13FC87697410407B2897F0A465B0DDB0F49177AC313579C1079A565E76CB81233F648DD98911E9AAB5C76DE220CADCF38C1A29743A4BAC0E3FC107CCD68DEE66EFE4D15C774682DC4490A861669A6B130DA97B1332AE175C1C96B47773B2E729736566C1D76F38F7AD1A93655974994E485E9F6DBC500967D4EF6ACD05FF76FCEB4C41DB3B3C780962E15A6E8473F5A558938D86CFAF1840A0AA5AEBB4B6C7A4DF5E11AFCFAD09BFE15FA4883972FA46C2959B624A518BBFD07D1AE82D294560D32390BA30BFC3CD0D2F3A26209AC467853948F6FFCAB45FEC0E295E64CEB6
tmp_aes_key = D3626B5D7D1A5A17A8F8C3A1D5639ACD9318ED75A46E81DFC8FCBF33450F3711
tmp_aes_iv = 8346B78BC1A9555AAC572A106176513DB61C5EF161B773F64C0526DCC64877DB</code></pre>
<!-- end server_DH_inner_data_input -->
<p>Yielding:</p>
<!-- start server_DH_inner_data_output -->
<pre><code>answer_with_hash = 0BE683EFD781089554415A53EE00C8ACC6D0FFF6BA0D89B5D45A1048DD542CEB93BAF41E88DE4B74C5377CD691F8CEDD363D8FC7FEDF3D7B03000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE00010063029A5FFA59973D6B5234A550713CB9F4A5431E7E8B8FAAED49C1EAE5F3C43D0578802C15D6E7482FA09853AD5955331AFE584C3FD51E041858BE0272FE24D576D905C60533ED5B425CE9201BD6A19C818A4825B7E286B4E013F454B1C329AF49EC7A1528FF72755F8AECF04999AEBE6366B80392560CE1C5E37A4A44847AAED690472C47C043607A16008C403B6C02B31C4F2B61DEDB07B63AE4EA3816BA77AF7A2E00E64CA74D24C9FAC11B95E4389148244AC48D76DD249173174C3622FF149E8E20F92BA12EC5D265EABAD9ABF286676E8B92B8D28E10269C2533638A7D30A5A2C300180F8924FBA39A27DA6C023EFF3DAC031926BB661276C606B302D099A77966238FBC5771A739D0
answer = BA0D89B5D45A1048DD542CEB93BAF41E88DE4B74C5377CD691F8CEDD363D8FC7FEDF3D7B03000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE00010063029A5FFA59973D6B5234A550713CB9F4A5431E7E8B8FAAED49C1EAE5F3C43D0578802C15D6E7482FA09853AD5955331AFE584C3FD51E041858BE0272FE24D576D905C60533ED5B425CE9201BD6A19C818A4825B7E286B4E013F454B1C329AF49EC7A1528FF72755F8AECF04999AEBE6366B80392560CE1C5E37A4A44847AAED690472C47C043607A16008C403B6C02B31C4F2B61DEDB07B63AE4EA3816BA77AF7A2E00E64CA74D24C9FAC11B95E4389148244AC48D76DD249173174C3622FF149E8E20F92BA12EC5D265EABAD9ABF286676E8B92B8D28E10269C2533638A7D30A5A2C300180F8924FBA39A27DA6C023EFF3DAC031926BB661276C606B302D099A77966238FBC5771A739D0</code></pre>
<pre><code>answer_with_hash = F201B86B3CC1A8EAA4477C0CE8644E7E213BEBBCBA0D89B5DC03790FD61107EBDAD16340B3503108724CD0AA73D75278681C2C3B5CAD947003000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100AD87D1D0A512F46D767C302227ED9DBA5D567E2A00B3542C9DD9A37FD05BD8394F63CEC69BD6249C56EEAE6D3A7BA6CBB5770B0F0ED97B7BC883D446C541305D2CA93C03C08E6A830FCEC71168F230B360E7E3AE0242D9A17F8E40279CB2B2A2075B7FC561CB64A101F328B87D319DA02159BFC9F3C3108E17192B3B780B6C605CC414571E349CBE7493D5A3A4EAD873408AA80D8ED8DE22B725AE8A02FA0723001E520096A8AAA9B73D3539A9C09D5DBB67F4F42134576A896FA2561FA0EB821EC70E9E57C26326A68F962C39D2A4D84F87DD9F0335A3AF646BDDF64499949BA4CEA681183221D9B3565AB9AB6CD23B543CD51DDC9ABDBC9D6A15F9CC0DEDC6A0AB79663786B99E051E8031
answer = BA0D89B5DC03790FD61107EBDAD16340B3503108724CD0AA73D75278681C2C3B5CAD947003000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100AD87D1D0A512F46D767C302227ED9DBA5D567E2A00B3542C9DD9A37FD05BD8394F63CEC69BD6249C56EEAE6D3A7BA6CBB5770B0F0ED97B7BC883D446C541305D2CA93C03C08E6A830FCEC71168F230B360E7E3AE0242D9A17F8E40279CB2B2A2075B7FC561CB64A101F328B87D319DA02159BFC9F3C3108E17192B3B780B6C605CC414571E349CBE7493D5A3A4EAD873408AA80D8ED8DE22B725AE8A02FA0723001E520096A8AAA9B73D3539A9C09D5DBB67F4F42134576A896FA2561FA0EB821EC70E9E57C26326A68F962C39D2A4D84F87DD9F0335A3AF646BDDF64499949BA4CEA681183221D9B3565AB9AB6CD23B543CD51DDC9ABDBC9D6A15F9CC0DEDC6A0AB79663786B99E051E8031</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 D4 5A 10 48 DD 54 2C EB 93 BA F4 1E
0010 | 88 DE 4B 74 C5 37 7C D6 91 F8 CE DD 36 3D 8F C7
0020 | FE DF 3D 7B 03 00 00 00 FE 00 01 00 C7 1C AE B9
<pre><code>0000 | BA 0D 89 B5 DC 03 79 0F D6 11 07 EB DA D1 63 40
0010 | B3 50 31 08 72 4C D0 AA 73 D7 52 78 68 1C 2C 3B
0020 | 5C AD 94 70 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 = BA0D89B5D45A1048DD542CEB93BAF41E88DE4B74C5377CD691F8CEDD363D8FC7FEDF3D7
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 | 63 02 9A 5F FA 59 97 3D 6B 52 34 A5 50 71 3C B9
0140 | F4 A5 43 1E 7E 8B 8F AA ED 49 C1 EA E5 F3 C4 3D
0150 | 05 78 80 2C 15 D6 E7 48 2F A0 98 53 AD 59 55 33
0160 | 1A FE 58 4C 3F D5 1E 04 18 58 BE 02 72 FE 24 D5
0170 | 76 D9 05 C6 05 33 ED 5B 42 5C E9 20 1B D6 A1 9C
0180 | 81 8A 48 25 B7 E2 86 B4 E0 13 F4 54 B1 C3 29 AF
0190 | 49 EC 7A 15 28 FF 72 75 5F 8A EC F0 49 99 AE BE
01A0 | 63 66 B8 03 92 56 0C E1 C5 E3 7A 4A 44 84 7A AE
01B0 | D6 90 47 2C 47 C0 43 60 7A 16 00 8C 40 3B 6C 02
01C0 | B3 1C 4F 2B 61 DE DB 07 B6 3A E4 EA 38 16 BA 77
01D0 | AF 7A 2E 00 E6 4C A7 4D 24 C9 FA C1 1B 95 E4 38
01E0 | 91 48 24 4A C4 8D 76 DD 24 91 73 17 4C 36 22 FF
01F0 | 14 9E 8E 20 F9 2B A1 2E C5 D2 65 EA BA D9 AB F2
0200 | 86 67 6E 8B 92 B8 D2 8E 10 26 9C 25 33 63 8A 7D
0210 | 30 A5 A2 C3 00 18 0F 89 24 FB A3 9A 27 DA 6C 02
0220 | 3E FF 3D AC 03 19 26 BB 66 12 76 C6 06 B3 02 D0
0230 | 99 A7 79 66</code></pre>
0130 | AD 87 D1 D0 A5 12 F4 6D 76 7C 30 22 27 ED 9D BA
0140 | 5D 56 7E 2A 00 B3 54 2C 9D D9 A3 7F D0 5B D8 39
0150 | 4F 63 CE C6 9B D6 24 9C 56 EE AE 6D 3A 7B A6 CB
0160 | B5 77 0B 0F 0E D9 7B 7B C8 83 D4 46 C5 41 30 5D
0170 | 2C A9 3C 03 C0 8E 6A 83 0F CE C7 11 68 F2 30 B3
0180 | 60 E7 E3 AE 02 42 D9 A1 7F 8E 40 27 9C B2 B2 A2
0190 | 07 5B 7F C5 61 CB 64 A1 01 F3 28 B8 7D 31 9D A0
01A0 | 21 59 BF C9 F3 C3 10 8E 17 19 2B 3B 78 0B 6C 60
01B0 | 5C C4 14 57 1E 34 9C BE 74 93 D5 A3 A4 EA D8 73
01C0 | 40 8A A8 0D 8E D8 DE 22 B7 25 AE 8A 02 FA 07 23
01D0 | 00 1E 52 00 96 A8 AA A9 B7 3D 35 39 A9 C0 9D 5D
01E0 | BB 67 F4 F4 21 34 57 6A 89 6F A2 56 1F A0 EB 82
01F0 | 1E C7 0E 9E 57 C2 63 26 A6 8F 96 2C 39 D2 A4 D8
0200 | 4F 87 DD 9F 03 35 A3 AF 64 6B DD F6 44 99 94 9B
0210 | A4 CE A6 81 18 32 21 D9 B3 56 5A B9 AB 6C D2 3B
0220 | 54 3C D5 1D DC 9A BD BC 9D 6A 15 F9 CC 0D ED C6
0230 | A0 AB 79 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 = BA0D89B5D45A1048DD542CEB93BAF41E88DE4B74C5377CD691F8CEDD363D8FC7FEDF3D7
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>D45A1048DD542CEB93BAF41E88DE4B74</code></td>
<td><code>DC03790FD61107EBDAD16340B3503108</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>C5377CD691F8CEDD363D8FC7FEDF3D7B</code></td>
<td><code>724CD0AA73D75278681C2C3B5CAD9470</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
@ -594,13 +594,13 @@ answer = BA0D89B5D45A1048DD542CEB93BAF41E88DE4B74C5377CD691F8CEDD363D8FC7FEDF3D7
<tr>
<td>g_a</td>
<td>300, 260</td>
<td><code>FE00010063029A5FFA59973D6B5234A5</code> <code>50713CB9F4A5431E7E8B8FAAED49C1EA</code> <code>E5F3C43D0578802C15D6E7482FA09853</code> <code>AD5955331AFE584C3FD51E041858BE02</code> <code>72FE24D576D905C60533ED5B425CE920</code> <code>1BD6A19C818A4825B7E286B4E013F454</code> <code>B1C329AF49EC7A1528FF72755F8AECF0</code> <code>4999AEBE6366B80392560CE1C5E37A4A</code> <code>44847AAED690472C47C043607A16008C</code> <code>403B6C02B31C4F2B61DEDB07B63AE4EA</code> <code>3816BA77AF7A2E00E64CA74D24C9FAC1</code> <code>1B95E4389148244AC48D76DD24917317</code> <code>4C3622FF149E8E20F92BA12EC5D265EA</code> <code>BAD9ABF286676E8B92B8D28E10269C25</code> <code>33638A7D30A5A2C300180F8924FBA39A</code> <code>27DA6C023EFF3DAC031926BB661276C6</code><br> <code>06B302D0</code></td>
<td><code>FE000100AD87D1D0A512F46D767C3022</code> <code>27ED9DBA5D567E2A00B3542C9DD9A37F</code> <code>D05BD8394F63CEC69BD6249C56EEAE6D</code> <code>3A7BA6CBB5770B0F0ED97B7BC883D446</code> <code>C541305D2CA93C03C08E6A830FCEC711</code> <code>68F230B360E7E3AE0242D9A17F8E4027</code> <code>9CB2B2A2075B7FC561CB64A101F328B8</code> <code>7D319DA02159BFC9F3C3108E17192B3B</code> <code>780B6C605CC414571E349CBE7493D5A3</code> <code>A4EAD873408AA80D8ED8DE22B725AE8A</code> <code>02FA0723001E520096A8AAA9B73D3539</code> <code>A9C09D5DBB67F4F42134576A896FA256</code> <code>1FA0EB821EC70E9E57C26326A68F962C</code> <code>39D2A4D84F87DD9F0335A3AF646BDDF6</code> <code>4499949BA4CEA681183221D9B3565AB9</code> <code>AB6CD23B543CD51DDC9ABDBC9D6A15F9</code><br> <code>CC0DEDC6</code></td>
<td><code>g_a</code> diffie-hellman parameter</td>
</tr>
<tr>
<td>server_time</td>
<td>560, 4</td>
<td><code>99A77966</code> (1719248793 in decimal)</td>
<td><code>A0AB7966</code> (1719249824 in decimal)</td>
<td>Server time</td>
</tr>
</tbody>
@ -609,34 +609,34 @@ answer = BA0D89B5D45A1048DD542CEB93BAF41E88DE4B74C5377CD691F8CEDD363D8FC7FEDF3D7
<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 = 553BE1FD6D539A750269AD7421BDD77C4D961D48B0582D9DFAC6C574677F5AD262F1A98E38D3AF1683F4C32B7CCEB6820DEA4746B09608DCC3A8C4336E769C8FDCD00A8EF7FAB6F84D427759B379BD7859773B56BFD0CDA17D94D8DA330269349A6162DB4D5A40BCCFC4BD44107EA738CDA8A00258988E3768EBAB2BC14CBB72A32FDC03AACB3DE8DE6D0BADE1BAC3964FFB23CCECCB79A0B34B75F934145D131EA3431AB430F6CAFE42F52B7153E2D8701A74750455AB9EC14C63AD3E868F2143BB00B4800D4BE0ABDBECD375A55C6680D7BEB939736D750E5DA9B4FE79263E9E88BA6591A81C03399F00206B0520836B58DA0DEC9702125277FE3E7FA9EE6C</code></pre>
<pre><code>b = C82980A4E9C7E68EF82EADCFEE9BAD5DC82B2E1C677109EF51CFBF3A82109187D5D5EC4BAC4A4169520646277193FD315BAAD962ECDC49B3B486D77542DBA5B2EAA34106DCF7DC00EFB68997E9DEAF1331541361C64D66711415485E75E8D934919C6649C2D923DC44CC201B0B72AA1BC4A5F938E26C3E84C3C4E6822C28DBC2D1334FBF8EA1715EAFAB8DD53DF87399C0EF19CDF48E7CF9E44F787741CF0718C37AE54D37C6E66A4719DBD30FB12752EF79051B822BC11F56448C0FC30078CECE51F8A7EB1E80C5AE91F98963BCED042C6D4CEAB37F09F51DEBBAD6E74A8D3BD5AAD4B6E8331641FF06D255F08B4D9F4001CB36ECE29B1A541ADA9334172FD6</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 = 05117351AF3C1A403AD3258BC3BED605FF9E5374F6089CB63FFC40D4E4C7A7BDC2743BB884D15BA2B68233B361C6FCFFEBE695943287A4F305895530AD810C602F27D427BB027C99B1AC81F4AAAB35A4EC4B9F6577633D6E43B8ACE3FABEA81F0C00E4C49018BA337E4E4D45D33BFD0815C6D17FA65F8963804511CFCE62327382F16AC97E372A8C584DBC21D10D6E1D4D29392EF9F8C5B01063775EC3D1945E3A106970158A94F01B2F9D1ACE7041BC0A5F1B4426453FFEC61F601589F6290316C67A38B76E42ECCDE9D1F13F1C0BD0E85AA46B0AFD8E1788E7F9732255B6B30A036C27CA35241DBA73A8274D2FA94CAA2A04A705DF6F209E07B3F3ABE92CA6</code></pre>
<pre><code>g_b = AD3C671E8D244426C393C91D558EFB89797EFBD5C34D9F5267D09CF8156AE456E40C82CB096813C673FD2B6C75D4D8D354060249C74733059E7A667AF66F8ED75D3E23DB8B02A82E1EEA3F19ECDD53A640AC10E7243BAC871C8457398D7D8FC2783A0DBB343E1F9D12062CEE3285909A302E9AA83AD7B10FF53C3CD076D9DECCA8C9DD4AC9288C0A8C3CABD0FEAE92EF5AB6DE5AC50F9E57B3C32E8A6AD2687AA01D6052BFAEFC7CF4E4D7F8E6EFD4CEE9E3E4D4CEC4A405011BE00A11B12CD77D45CE9755CAD6EFBE89ED7C65ED2F9128C8BD29D2564D285B64B89D932B956D667F34557F6B5E26C673322D694C4BAA01F72E2361C6D8EE3DCB080BDBBB6680</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 D4 5A 10 48 DD 54 2C EB 93 BA F4 1E
0010 | 88 DE 4B 74 C5 37 7C D6 91 F8 CE DD 36 3D 8F C7
0020 | FE DF 3D 7B 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | 05 11 73 51 AF 3C 1A 40 3A D3 25 8B C3 BE D6 05
0040 | FF 9E 53 74 F6 08 9C B6 3F FC 40 D4 E4 C7 A7 BD
0050 | C2 74 3B B8 84 D1 5B A2 B6 82 33 B3 61 C6 FC FF
0060 | EB E6 95 94 32 87 A4 F3 05 89 55 30 AD 81 0C 60
0070 | 2F 27 D4 27 BB 02 7C 99 B1 AC 81 F4 AA AB 35 A4
0080 | EC 4B 9F 65 77 63 3D 6E 43 B8 AC E3 FA BE A8 1F
0090 | 0C 00 E4 C4 90 18 BA 33 7E 4E 4D 45 D3 3B FD 08
00A0 | 15 C6 D1 7F A6 5F 89 63 80 45 11 CF CE 62 32 73
00B0 | 82 F1 6A C9 7E 37 2A 8C 58 4D BC 21 D1 0D 6E 1D
00C0 | 4D 29 39 2E F9 F8 C5 B0 10 63 77 5E C3 D1 94 5E
00D0 | 3A 10 69 70 15 8A 94 F0 1B 2F 9D 1A CE 70 41 BC
00E0 | 0A 5F 1B 44 26 45 3F FE C6 1F 60 15 89 F6 29 03
00F0 | 16 C6 7A 38 B7 6E 42 EC CD E9 D1 F1 3F 1C 0B D0
0100 | E8 5A A4 6B 0A FD 8E 17 88 E7 F9 73 22 55 B6 B3
0110 | 0A 03 6C 27 CA 35 24 1D BA 73 A8 27 4D 2F A9 4C
0120 | AA 2A 04 A7 05 DF 6F 20 9E 07 B3 F3 AB E9 2C A6</code></pre>
<pre><code>0000 | 54 B6 43 66 DC 03 79 0F D6 11 07 EB DA D1 63 40
0010 | B3 50 31 08 72 4C D0 AA 73 D7 52 78 68 1C 2C 3B
0020 | 5C AD 94 70 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | AD 3C 67 1E 8D 24 44 26 C3 93 C9 1D 55 8E FB 89
0040 | 79 7E FB D5 C3 4D 9F 52 67 D0 9C F8 15 6A E4 56
0050 | E4 0C 82 CB 09 68 13 C6 73 FD 2B 6C 75 D4 D8 D3
0060 | 54 06 02 49 C7 47 33 05 9E 7A 66 7A F6 6F 8E D7
0070 | 5D 3E 23 DB 8B 02 A8 2E 1E EA 3F 19 EC DD 53 A6
0080 | 40 AC 10 E7 24 3B AC 87 1C 84 57 39 8D 7D 8F C2
0090 | 78 3A 0D BB 34 3E 1F 9D 12 06 2C EE 32 85 90 9A
00A0 | 30 2E 9A A8 3A D7 B1 0F F5 3C 3C D0 76 D9 DE CC
00B0 | A8 C9 DD 4A C9 28 8C 0A 8C 3C AB D0 FE AE 92 EF
00C0 | 5A B6 DE 5A C5 0F 9E 57 B3 C3 2E 8A 6A D2 68 7A
00D0 | A0 1D 60 52 BF AE FC 7C F4 E4 D7 F8 E6 EF D4 CE
00E0 | E9 E3 E4 D4 CE C4 A4 05 01 1B E0 0A 11 B1 2C D7
00F0 | 7D 45 CE 97 55 CA D6 EF BE 89 ED 7C 65 ED 2F 91
0100 | 28 C8 BD 29 D2 56 4D 28 5B 64 B8 9D 93 2B 95 6D
0110 | 66 7F 34 55 7F 6B 5E 26 C6 73 32 2D 69 4C 4B AA
0120 | 01 F7 2E 23 61 C6 D8 EE 3D CB 08 0B DB BB 66 80</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 = BA0D89B5D45A1048DD542CEB93BAF41E88DE4B74C5377CD691F8CEDD363D8FC7FEDF3D7
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>D45A1048DD542CEB93BAF41E88DE4B74</code></td>
<td><code>DC03790FD61107EBDAD16340B3503108</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>C5377CD691F8CEDD363D8FC7FEDF3D7B</code></td>
<td><code>724CD0AA73D75278681C2C3B5CAD9470</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>g_b</td>
<td>36, 260</td>
<td><code>FE00010005117351AF3C1A403AD3258B</code> <code>C3BED605FF9E5374F6089CB63FFC40D4</code> <code>E4C7A7BDC2743BB884D15BA2B68233B3</code> <code>61C6FCFFEBE695943287A4F305895530</code> <code>AD810C602F27D427BB027C99B1AC81F4</code> <code>AAAB35A4EC4B9F6577633D6E43B8ACE3</code> <code>FABEA81F0C00E4C49018BA337E4E4D45</code> <code>D33BFD0815C6D17FA65F8963804511CF</code> <code>CE62327382F16AC97E372A8C584DBC21</code> <code>D10D6E1D4D29392EF9F8C5B01063775E</code> <code>C3D1945E3A106970158A94F01B2F9D1A</code> <code>CE7041BC0A5F1B4426453FFEC61F6015</code> <code>89F6290316C67A38B76E42ECCDE9D1F1</code> <code>3F1C0BD0E85AA46B0AFD8E1788E7F973</code> <code>2255B6B30A036C27CA35241DBA73A827</code> <code>4D2FA94CAA2A04A705DF6F209E07B3F3</code><br> <code>ABE92CA6</code></td>
<td><code>FE000100AD3C671E8D244426C393C91D</code> <code>558EFB89797EFBD5C34D9F5267D09CF8</code> <code>156AE456E40C82CB096813C673FD2B6C</code> <code>75D4D8D354060249C74733059E7A667A</code> <code>F66F8ED75D3E23DB8B02A82E1EEA3F19</code> <code>ECDD53A640AC10E7243BAC871C845739</code> <code>8D7D8FC2783A0DBB343E1F9D12062CEE</code> <code>3285909A302E9AA83AD7B10FF53C3CD0</code> <code>76D9DECCA8C9DD4AC9288C0A8C3CABD0</code> <code>FEAE92EF5AB6DE5AC50F9E57B3C32E8A</code> <code>6AD2687AA01D6052BFAEFC7CF4E4D7F8</code> <code>E6EFD4CEE9E3E4D4CEC4A405011BE00A</code> <code>11B12CD77D45CE9755CAD6EFBE89ED7C</code> <code>65ED2F9128C8BD29D2564D285B64B89D</code> <code>932B956D667F34557F6B5E26C673322D</code> <code>694C4BAA01F72E2361C6D8EE3DCB080B</code><br> <code>DBBB6680</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 = BA0D89B5D45A1048DD542CEB93BAF41E88DE4B74C5377CD691F8CEDD363D8FC7FEDF3D7
<!-- 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 = 54B64366D45A1048DD542CEB93BAF41E88DE4B74C5377CD691F8CEDD363D8FC7FEDF3D7B0000000000000000FE00010005117351AF3C1A403AD3258BC3BED605FF9E5374F6089CB63FFC40D4E4C7A7BDC2743BB884D15BA2B68233B361C6FCFFEBE695943287A4F305895530AD810C602F27D427BB027C99B1AC81F4AAAB35A4EC4B9F6577633D6E43B8ACE3FABEA81F0C00E4C49018BA337E4E4D45D33BFD0815C6D17FA65F8963804511CFCE62327382F16AC97E372A8C584DBC21D10D6E1D4D29392EF9F8C5B01063775EC3D1945E3A106970158A94F01B2F9D1ACE7041BC0A5F1B4426453FFEC61F601589F6290316C67A38B76E42ECCDE9D1F13F1C0BD0E85AA46B0AFD8E1788E7F9732255B6B30A036C27CA35241DBA73A8274D2FA94CAA2A04A705DF6F209E07B3F3ABE92CA6
padding = DEE8F11B2001E4F5E7EB904F
tmp_aes_key = B6DCA375BD1FBCB35C5DC4AC99AF7BEEA45A673F832B617967231EB190E8344E
tmp_aes_iv = DD4D80EFB531616F749D717D8D556794F655938F3D1942FDFDA6EE4693B1FFC5</code></pre>
<pre><code>data = 54B64366DC03790FD61107EBDAD16340B3503108724CD0AA73D75278681C2C3B5CAD94700000000000000000FE000100AD3C671E8D244426C393C91D558EFB89797EFBD5C34D9F5267D09CF8156AE456E40C82CB096813C673FD2B6C75D4D8D354060249C74733059E7A667AF66F8ED75D3E23DB8B02A82E1EEA3F19ECDD53A640AC10E7243BAC871C8457398D7D8FC2783A0DBB343E1F9D12062CEE3285909A302E9AA83AD7B10FF53C3CD076D9DECCA8C9DD4AC9288C0A8C3CABD0FEAE92EF5AB6DE5AC50F9E57B3C32E8A6AD2687AA01D6052BFAEFC7CF4E4D7F8E6EFD4CEE9E3E4D4CEC4A405011BE00A11B12CD77D45CE9755CAD6EFBE89ED7C65ED2F9128C8BD29D2564D285B64B89D932B956D667F34557F6B5E26C673322D694C4BAA01F72E2361C6D8EE3DCB080BDBBB6680
padding = 3EC564EAD94B0FF35C130EE2
tmp_aes_key = D3626B5D7D1A5A17A8F8C3A1D5639ACD9318ED75A46E81DFC8FCBF33450F3711
tmp_aes_iv = 8346B78BC1A9555AAC572A106176513DB61C5EF161B773F64C0526DCC64877DB</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 = 1A579496107925531B376D709AAC2A7817B1E1D22CD1A40B24B07CCEC9A63A9367BEE0B1986B225490E6C01CC07960DD8C3AAA1C00D71C2FFDBEEEB136A0D012EED1F00EA4A8ED4D46A06EFE148D6BB2200365C653E6D7B9362792469B26C29735EFE78F06606A75A56B59091FC996E632F02E05BD3D1872C1B3FAAACD9CCF223611B60121FCF921BCB6ACE58852371D6184477D0AB01BBE61D30D57FB1E34F657E229567099820C630F2BF4C431866147C03127347E762DE1E514BF06647E85C2E1901813AA328052F78F26396B8DC193A00C4E15FA32F1CFBC452B3A051715F2F152814826A24F8D07CCDF7B73DC45D5EE0B1ADF389160909DC267C38B182A272C99A24484B376DA78B61A648F9B9819B8F3387BD9E7D72E604771DA38CC3580C21A580051537B0CDDE8107A5680058AD757846AE7487E4F2E51CB21F9D04E49AE9E047294FEB543DC60189A0BA8EC</code></pre>
<pre><code>encrypted_data = 96F3D74A4DAC17CD96F8C5EE06FF06C25F80102A4A658A1C63738F39E3C028D24951D392B5A422A60C2C66B0AD851BCF243527132BF856E55E67116CAD296B9F88AA337C6532A319DE51F3B4062BC70E14CEC589628E43797203FDB7AE04CD5E5A0E94305E255AB686D15CFACEDF4045F08B326722333263EECD021BCD6E4D17A9D5A85859AA4CC71D2E93FE951D4217249BE49F503E9A23BBA55D562FC81B7B68C0030F81935E99CAC52AC131082765E0BCC2B276504C65CA17FE9DAE26F691CE00D2DE41ED2A1E1D9027FEBC9EC3876A6FE20B7BF5AEDE46445D34EF8F3FDA7803659010BCEE30E2A59E5268AEB12CAF6745915202C44448A166E9400FD295379FAD8F66B8AA41752B9DC786977CF4B3DCE094B34299C83CFDA86593EAC8CDBD51D6C34A4F08C1BAFE238698B40A09163EC700EF4D417E103ABA92B3E54EF644BE5BE924104897C1C70BA9C09A932F</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 9C 30 06 00 99 A7 79 66
0010 | 78 01 00 00 1F 5F 04 F5 D4 5A 10 48 DD 54 2C EB
0020 | 93 BA F4 1E 88 DE 4B 74 C5 37 7C D6 91 F8 CE DD
0030 | 36 3D 8F C7 FE DF 3D 7B FE 50 01 00 1A 57 94 96
0040 | 10 79 25 53 1B 37 6D 70 9A AC 2A 78 17 B1 E1 D2
0050 | 2C D1 A4 0B 24 B0 7C CE C9 A6 3A 93 67 BE E0 B1
0060 | 98 6B 22 54 90 E6 C0 1C C0 79 60 DD 8C 3A AA 1C
0070 | 00 D7 1C 2F FD BE EE B1 36 A0 D0 12 EE D1 F0 0E
0080 | A4 A8 ED 4D 46 A0 6E FE 14 8D 6B B2 20 03 65 C6
0090 | 53 E6 D7 B9 36 27 92 46 9B 26 C2 97 35 EF E7 8F
00A0 | 06 60 6A 75 A5 6B 59 09 1F C9 96 E6 32 F0 2E 05
00B0 | BD 3D 18 72 C1 B3 FA AA CD 9C CF 22 36 11 B6 01
00C0 | 21 FC F9 21 BC B6 AC E5 88 52 37 1D 61 84 47 7D
00D0 | 0A B0 1B BE 61 D3 0D 57 FB 1E 34 F6 57 E2 29 56
00E0 | 70 99 82 0C 63 0F 2B F4 C4 31 86 61 47 C0 31 27
00F0 | 34 7E 76 2D E1 E5 14 BF 06 64 7E 85 C2 E1 90 18
0100 | 13 AA 32 80 52 F7 8F 26 39 6B 8D C1 93 A0 0C 4E
0110 | 15 FA 32 F1 CF BC 45 2B 3A 05 17 15 F2 F1 52 81
0120 | 48 26 A2 4F 8D 07 CC DF 7B 73 DC 45 D5 EE 0B 1A
0130 | DF 38 91 60 90 9D C2 67 C3 8B 18 2A 27 2C 99 A2
0140 | 44 84 B3 76 DA 78 B6 1A 64 8F 9B 98 19 B8 F3 38
0150 | 7B D9 E7 D7 2E 60 47 71 DA 38 CC 35 80 C2 1A 58
0160 | 00 51 53 7B 0C DD E8 10 7A 56 80 05 8A D7 57 84
0170 | 6A E7 48 7E 4F 2E 51 CB 21 F9 D0 4E 49 AE 9E 04
0180 | 72 94 FE B5 43 DC 60 18 9A 0B A8 EC</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 60 5C 05 00 A0 AB 79 66
0010 | 78 01 00 00 1F 5F 04 F5 DC 03 79 0F D6 11 07 EB
0020 | DA D1 63 40 B3 50 31 08 72 4C D0 AA 73 D7 52 78
0030 | 68 1C 2C 3B 5C AD 94 70 FE 50 01 00 96 F3 D7 4A
0040 | 4D AC 17 CD 96 F8 C5 EE 06 FF 06 C2 5F 80 10 2A
0050 | 4A 65 8A 1C 63 73 8F 39 E3 C0 28 D2 49 51 D3 92
0060 | B5 A4 22 A6 0C 2C 66 B0 AD 85 1B CF 24 35 27 13
0070 | 2B F8 56 E5 5E 67 11 6C AD 29 6B 9F 88 AA 33 7C
0080 | 65 32 A3 19 DE 51 F3 B4 06 2B C7 0E 14 CE C5 89
0090 | 62 8E 43 79 72 03 FD B7 AE 04 CD 5E 5A 0E 94 30
00A0 | 5E 25 5A B6 86 D1 5C FA CE DF 40 45 F0 8B 32 67
00B0 | 22 33 32 63 EE CD 02 1B CD 6E 4D 17 A9 D5 A8 58
00C0 | 59 AA 4C C7 1D 2E 93 FE 95 1D 42 17 24 9B E4 9F
00D0 | 50 3E 9A 23 BB A5 5D 56 2F C8 1B 7B 68 C0 03 0F
00E0 | 81 93 5E 99 CA C5 2A C1 31 08 27 65 E0 BC C2 B2
00F0 | 76 50 4C 65 CA 17 FE 9D AE 26 F6 91 CE 00 D2 DE
0100 | 41 ED 2A 1E 1D 90 27 FE BC 9E C3 87 6A 6F E2 0B
0110 | 7B F5 AE DE 46 44 5D 34 EF 8F 3F DA 78 03 65 90
0120 | 10 BC EE 30 E2 A5 9E 52 68 AE B1 2C AF 67 45 91
0130 | 52 02 C4 44 48 A1 66 E9 40 0F D2 95 37 9F AD 8F
0140 | 66 B8 AA 41 75 2B 9D C7 86 97 7C F4 B3 DC E0 94
0150 | B3 42 99 C8 3C FD A8 65 93 EA C8 CD BD 51 D6 C3
0160 | 4A 4F 08 C1 BA FE 23 86 98 B4 0A 09 16 3E C7 00
0170 | EF 4D 41 7E 10 3A BA 92 B3 E5 4E F6 44 BE 5B E9
0180 | 24 10 48 97 C1 C7 0B A9 C0 9A 93 2F</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>9C30060099A77966</code></td>
<td><code>605C0500A0AB7966</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>D45A1048DD542CEB93BAF41E88DE4B74</code></td>
<td><code>DC03790FD61107EBDAD16340B3503108</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>C5377CD691F8CEDD363D8FC7FEDF3D7B</code></td>
<td><code>724CD0AA73D75278681C2C3B5CAD9470</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_data</td>
<td>56, 340</td>
<td><code>FE5001001A579496107925531B376D70</code> <code>9AAC2A7817B1E1D22CD1A40B24B07CCE</code> <code>C9A63A9367BEE0B1986B225490E6C01C</code> <code>C07960DD8C3AAA1C00D71C2FFDBEEEB1</code> <code>36A0D012EED1F00EA4A8ED4D46A06EFE</code> <code>148D6BB2200365C653E6D7B936279246</code> <code>9B26C29735EFE78F06606A75A56B5909</code> <code>1FC996E632F02E05BD3D1872C1B3FAAA</code> <code>CD9CCF223611B60121FCF921BCB6ACE5</code> <code>8852371D6184477D0AB01BBE61D30D57</code> <code>FB1E34F657E229567099820C630F2BF4</code> <code>C431866147C03127347E762DE1E514BF</code> <code>06647E85C2E1901813AA328052F78F26</code> <code>396B8DC193A00C4E15FA32F1CFBC452B</code> <code>3A051715F2F152814826A24F8D07CCDF</code> <code>7B73DC45D5EE0B1ADF389160909DC267</code> <code>C38B182A272C99A24484B376DA78B61A</code> <code>648F9B9819B8F3387BD9E7D72E604771</code> <code>DA38CC3580C21A580051537B0CDDE810</code> <code>7A5680058AD757846AE7487E4F2E51CB</code> <code>21F9D04E49AE9E047294FEB543DC6018</code><br> <code>9A0BA8EC</code></td>
<td><code>FE50010096F3D74A4DAC17CD96F8C5EE</code> <code>06FF06C25F80102A4A658A1C63738F39</code> <code>E3C028D24951D392B5A422A60C2C66B0</code> <code>AD851BCF243527132BF856E55E67116C</code> <code>AD296B9F88AA337C6532A319DE51F3B4</code> <code>062BC70E14CEC589628E43797203FDB7</code> <code>AE04CD5E5A0E94305E255AB686D15CFA</code> <code>CEDF4045F08B326722333263EECD021B</code> <code>CD6E4D17A9D5A85859AA4CC71D2E93FE</code> <code>951D4217249BE49F503E9A23BBA55D56</code> <code>2FC81B7B68C0030F81935E99CAC52AC1</code> <code>31082765E0BCC2B276504C65CA17FE9D</code> <code>AE26F691CE00D2DE41ED2A1E1D9027FE</code> <code>BC9EC3876A6FE20B7BF5AEDE46445D34</code> <code>EF8F3FDA7803659010BCEE30E2A59E52</code> <code>68AEB12CAF6745915202C44448A166E9</code> <code>400FD295379FAD8F66B8AA41752B9DC7</code> <code>86977CF4B3DCE094B34299C83CFDA865</code> <code>93EAC8CDBD51D6C34A4F08C1BAFE2386</code> <code>98B40A09163EC700EF4D417E103ABA92</code> <code>B3E54EF644BE5BE924104897C1C70BA9</code><br> <code>C09A932F</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 = 0BF99E1B1020531057E407D8CA793759EAB5D8BA2E88F7719EB6EA3ADDD458067BA11914DBE76F5FF192A7CA383CB65E1F977FCAFF69057B04E196DCFCF973C951BD35D649101125498227D4D31E678E7F0F2AA4C0B0A182D33EB850CB2471ADEE4FAD7A6C88AB91AA327A4D391C0046A055E5A6E5CB2D2AC7E9E9FD7BC7C75DDEC706788C0023920FB6A82B33E299762117A849F339F2D256625C46AA77D32EFDEA030AD6A44EEDE98AB85718F2F3C66B59892C3A0E546F11B8B77741FACBA65352FB926B3B6FFA254140C0FE7CA83029FD4F9BBDCA3A54AD45A109E572D4E2DC3A17F9A3AD7ACF6EF796E1621865823F31A1774968EF01A5F1259FEA423BD9</code></pre>
<pre><code>auth_key = 6A67F69248BA4F9B37DC258F29C9394303D2B8212D27DC4D5308A6F97994CDB71FCE4EE5999C56A6A63CCA9EEDF82BDEC56075814447B7E52995DD2DD65E5AC2A68DA21ADBFA1F2F76D1FD9F0119450B616353DB48FE8C8E45527DBF2A5476E4CB190CA7EAF606D504D9565985C4965B6F6BD7499D325A52F51F82BDF095235D8F9413B700C746B0FBE37CB7E02CBDE1539BAA74A94FD03EC8984AFC3D316EEE5B7C7EAE551E3EA6893D4BD06C544178AF72E56DD5FFC399B21A06CCD663C4D870EE75487487D62EEF7BA3583011B12EB8BD6449D71BC3A74EB55DA00B17A7E1F738CB4041317DBF67FB92CBE853C2139B55EEF4A1FF46E4952990DF0B6DC908</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 3C 46 34 9A A7 79 66
0010 | 68 00 00 00 34 F7 CB 3B D4 5A 10 48 DD 54 2C EB
0020 | 93 BA F4 1E 88 DE 4B 74 C5 37 7C D6 91 F8 CE DD
0030 | 36 3D 8F C7 FE DF 3D 7B 6A 7C 96 A2 B7 3A 3C A0
0040 | 8A 99 2A C5 EA 47 56 D0</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 50 69 17 A1 AB 79 66
0010 | A0 00 00 00 34 F7 CB 3B DC 03 79 0F D6 11 07 EB
0020 | DA D1 63 40 B3 50 31 08 72 4C D0 AA 73 D7 52 78
0030 | 68 1C 2C 3B 5C AD 94 70 6D 52 C4 71 1A 59 34 7C
0040 | 0E 01 BF A5 8D 55 08 E8</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>013C46349AA77966</code></td>
<td><code>01506917A1AB7966</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>A0000000</code> (160 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>D45A1048DD542CEB93BAF41E88DE4B74</code></td>
<td><code>DC03790FD61107EBDAD16340B3503108</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>C5377CD691F8CEDD363D8FC7FEDF3D7B</code></td>
<td><code>724CD0AA73D75278681C2C3B5CAD9470</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce_hash1</td>
<td>56, 16</td>
<td><code>6A7C96A2B73A3CA08A992AC5EA4756D0</code></td>
<td><code>6D52C4711A59347C0E01BFA58D5508E8</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>