Update content of files

This commit is contained in:
GitHub Action 2024-06-24 17:12:19 +00:00
parent 6b18863a83
commit a7f451b02a
5 changed files with 255 additions and 213 deletions

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> </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>
</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> </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>
</tr>
</tbody>
</table>
@ -102,7 +102,12 @@
<p><a href="/type/GlobalPrivacySettings">GlobalPrivacySettings</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="#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></div>
<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="#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="#userfull" id="userfull" name="userfull"><i class="anchor-icon"></i></a><a href="/constructor/userFull">userFull</a></h4>
<p>Extended user info</p></div>
</div>

View file

@ -129,17 +129,17 @@
<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> </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>
</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> </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>
</tr>
<tr>
<td><strong>flags2</strong></td>
<td style="text-align: center;"><a href="/type/%23">#</a></td>
<td> </td>
<td>Flags, see <a href="/mtproto/TL-combinators#conditional-fields">TL conditional fields</a></td>
</tr>
<tr>
<td><strong>sponsored_enabled</strong></td>
@ -298,6 +298,15 @@
<p>Set a custom <a href="/api/wallpapers">wallpaper »</a> in a specific private chat with another user.</p>
<h4><a class="anchor" href="#wallpapers" id="wallpapers" name="wallpapers"><i class="anchor-icon"></i></a><a href="/api/wallpapers">Wallpapers</a></h4>
<p>Telegram apps support generating, sharing and synchronizing chat backgrounds.</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>
<h4><a class="anchor" href="#user" id="user" name="user"><i class="anchor-icon"></i></a><a href="/constructor/user">user</a></h4>
<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>
<h4><a class="anchor" href="#folders" id="folders" name="folders"><i class="anchor-icon"></i></a><a href="/api/folders">Folders</a></h4>

View file

@ -72,6 +72,11 @@
</thead>
<tbody>
<tr>
<td>400</td>
<td>TAKEOUT_INVALID</td>
<td>The specified takeout ID is invalid.</td>
</tr>
<tr>
<td>403</td>
<td>TAKEOUT_REQUIRED</td>
<td>A <a href="/api/takeout">takeout</a> session needs to be initialized first, <a href="/api/takeout">see here » for more info</a>.</td>

View file

@ -123,11 +123,34 @@ Description…">
<tbody>
<tr>
<td>400</td>
<td>MESSAGE_ID_INVALID</td>
<td>The provided message id is invalid.</td>
</tr>
<tr>
<td>400</td>
<td>MESSAGE_TOO_OLD</td>
<td>The message is too old, the requested information is not available.</td>
</tr>
<tr>
<td>400</td>
<td>PEER_ID_INVALID</td>
<td>The provided peer id is invalid.</td>
</tr>
<tr>
<td>403</td>
<td>USER_PRIVACY_RESTRICTED</td>
<td>The user's privacy settings do not allow you to do this.</td>
</tr>
<tr>
<td>403</td>
<td>YOUR_PRIVACY_RESTRICTED</td>
<td>You cannot fetch the read date of this message because you have disallowed other users to do so for <em>your</em> messages; to fix, allow other users to see <em>your</em> exact last online date OR purchase a <a href="/api/premium">Telegram Premium</a> subscription.</td>
</tr>
</tbody>
</table></div>
</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="#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

@ -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 68 82 01 00 9A ED 77 66
0010 | 14 00 00 00 F1 8E 7E BE BD D3 43 62 8E 05 18 35
0020 | 1B EB 12 EF BC AF BB 7C</code></pre>
<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>
<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>688201009AED7766</code></td>
<td><code>B86A0A0098A77966</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>BDD343628E0518351BEB12EFBCAFBB7C</code></td>
<td><code>D45A1048DD542CEB93BAF41E88DE4B74</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 5C ED 7B 9A ED 77 66
0010 | 68 00 00 00 63 24 16 05 BD D3 43 62 8E 05 18 35
0020 | 1B EB 12 EF BC AF BB 7C 20 FB B9 18 86 EE 0C 2E
0030 | BF BD 51 E8 A5 03 40 98 08 1E CE 43 71 B8 6C 45
0040 | E3 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 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
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>015CED7B9AED7766</code></td>
<td><code>0130E0AC98A77966</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>C4000000</code> (196 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -150,19 +150,19 @@
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>BDD343628E0518351BEB12EFBCAFBB7C</code></td>
<td><code>D45A1048DD542CEB93BAF41E88DE4B74</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>20FBB91886EE0C2EBFBD51E8A5034098</code></td>
<td><code>C5377CD691F8CEDD363D8FC7FEDF3D7B</code></td>
<td>Server-generated random number</td>
</tr>
<tr>
<td>pq</td>
<td>56, 12</td>
<td><code>081ECE4371B86C45E3000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2219785822044702179</td>
<td><code>0816863777EE8D1EC3000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1623045703956504259</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 = 2219785822044702179</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>2219785822044702179 = 1275787277 * 1739934127</code></p>
<pre><code>p = 1275787277
q = 1739934127</code></pre>
<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>
<!-- 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 1E CE 43 71 B8 6C 45 E3 00 00 00
0010 | 04 4C 0A F8 0D 00 00 00 04 67 B5 49 AF 00 00 00
0020 | BD D3 43 62 8E 05 18 35 1B EB 12 EF BC AF BB 7C
0030 | 20 FB B9 18 86 EE 0C 2E BF BD 51 E8 A5 03 40 98
0040 | 34 5D F4 48 5C 4F 01 3B D2 B2 71 5D 91 98 5D 71
0050 | 9A 75 09 9C 72 DF AD 46 26 AA 13 3F 70 6D 90 1E
<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
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 = 1739934127</code></pre>
<tr>
<td>pq</td>
<td>4, 12</td>
<td><code>081ECE4371B86C45E3000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2219785822044702179</td>
<td><code>0816863777EE8D1EC3000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1623045703956504259</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>044C0AF80D000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1275787277</td>
<td><code>043C6EB1A1000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1013887393</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>0467B549AF000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1739934127</td>
<td><code>045F6A7DE3000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1600814563</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>BDD343628E0518351BEB12EFBCAFBB7C</code></td>
<td><code>D45A1048DD542CEB93BAF41E88DE4B74</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>48, 16</td>
<td><code>20FBB91886EE0C2EBFBD51E8A5034098</code></td>
<td><code>C5377CD691F8CEDD363D8FC7FEDF3D7B</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce</td>
<td>64, 32</td>
<td><code>345DF4485C4F013BD2B2715D91985D71</code> <code>9A75099C72DFAD4626AA133F706D901E</code></td>
<td><code>93B1FFC5FCA23E197E124D71339CE334</code> <code>2DC002D81B4E239ADE75459525C0D51E</code></td>
<td>Client-generated random number</td>
</tr>
<tr>
@ -291,39 +291,39 @@ q = 1739934127</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 = 955FF5A9081ECE4371B86C45E3000000044C0AF80D0000000467B549AF000000BDD343628E0518351BEB12EFBCAFBB7C20FBB91886EE0C2EBFBD51E8A5034098345DF4485C4F013BD2B2715D91985D719A75099C72DFAD4626AA133F706D901E02000000
random_padding_bytes = 74898DDC498AC0DB200C925B12A533A4E45EEB1F799632FF14A00A3C67BF2D1B1E5B51198EDCF74817A9F393D00774F028C17FA6A26BC0F6BBE175502EB3C22A3B81361EDCFB9EEE72D0298AEE741BFA8592B09CCD3A8A2231D2717B</code></pre>
<pre><code>data = 955FF5A90816863777EE8D1EC3000000043C6EB1A1000000045F6A7DE3000000D45A1048DD542CEB93BAF41E88DE4B74C5377CD691F8CEDD363D8FC7FEDF3D7B93B1FFC5FCA23E197E124D71339CE3342DC002D81B4E239ADE75459525C0D51E02000000
random_padding_bytes = 44A6E0B1FA5F5E5CE010D882A40B698476C112F26322D44CBC93FD2B99CBAF1BA2EFEB033085ECBCA520CB8B8F305441DD8776CBB8B3230BB767F6E52C4CC6CF65C28A942F4CBF979394D3B42AFDD92A186379568186F2B14C75BD4F</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 = A9B1176500689D99C4442CA88FF80035AF58FE2A59399E4CA85D81F7045EAA7EC3DA61007668A9F68041B8BEB69BAD881EA80FFD3E9278BF660065D51ACD0F2A77AAC1AD41F268F0046C63D20E0910CC45D9172B3B6169EB6995AE931ED126BDD155E25D1DEFFF29DB2CC8097383614F20D5E7B83B8F575EE521D562F81A9B45C944FD9AB27D548874A46D957FAB7E0267328FD0058BEA4383FB02F9B7612490417D4033403D58A19CCE6D11CABE864239F39B621F7C51F6BF6A90B3FD8EFA5A869B6D5E25C325D235020A3126D3C4B65EEE0BE9FB5A5C300A7EB03F50968FAAAFF122303D73DD35E86FA3AB8E0F2D50BCABB698C00EBD04D8ABA422291C80CF</code></pre>
<pre><code>encrypted_data = 51A4C35E1001399E2D3D0BB0E27E0EE873D637E6FFB369852F942E768A7B13DB4DD3CF95AFDC047411AF6F7D84083554E5CB84B231CB8C994B7132DB92CDF1547C69148B6E94D72D0A6D41E943BAA93F1E114FBC3859FD0525C5952B5A61821645ECFC9E38A4363EA9FF9A9D7EE90F3A1374F40D27BA2214C9BE9F2422F0AC28FDD11F96C10E59909E43F0BCF7B10C253210A014F6E9E647EB078D147377270CFD83487A7138A988EA3C5EE521C30F684A85FD821B0C44A1974B40A619CBB8B3B421DBF1B0BEB1105815B555EC505CF3C08401F4D087BB3752145B0F17F401125414E4EDEBDCA06CA9D96CA18B9CBE00B395706C5E57BB2EFB5CA8E8FB1C2C7B</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 F0 EB 0C 00 9A ED 77 66
0010 | 40 01 00 00 BE E4 12 D7 BD D3 43 62 8E 05 18 35
0020 | 1B EB 12 EF BC AF BB 7C 20 FB B9 18 86 EE 0C 2E
0030 | BF BD 51 E8 A5 03 40 98 04 4C 0A F8 0D 00 00 00
0040 | 04 67 B5 49 AF 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 A9 B1 17 65 00 68 9D 99 C4 44 2C A8
0060 | 8F F8 00 35 AF 58 FE 2A 59 39 9E 4C A8 5D 81 F7
0070 | 04 5E AA 7E C3 DA 61 00 76 68 A9 F6 80 41 B8 BE
0080 | B6 9B AD 88 1E A8 0F FD 3E 92 78 BF 66 00 65 D5
0090 | 1A CD 0F 2A 77 AA C1 AD 41 F2 68 F0 04 6C 63 D2
00A0 | 0E 09 10 CC 45 D9 17 2B 3B 61 69 EB 69 95 AE 93
00B0 | 1E D1 26 BD D1 55 E2 5D 1D EF FF 29 DB 2C C8 09
00C0 | 73 83 61 4F 20 D5 E7 B8 3B 8F 57 5E E5 21 D5 62
00D0 | F8 1A 9B 45 C9 44 FD 9A B2 7D 54 88 74 A4 6D 95
00E0 | 7F AB 7E 02 67 32 8F D0 05 8B EA 43 83 FB 02 F9
00F0 | B7 61 24 90 41 7D 40 33 40 3D 58 A1 9C CE 6D 11
0100 | CA BE 86 42 39 F3 9B 62 1F 7C 51 F6 BF 6A 90 B3
0110 | FD 8E FA 5A 86 9B 6D 5E 25 C3 25 D2 35 02 0A 31
0120 | 26 D3 C4 B6 5E EE 0B E9 FB 5A 5C 30 0A 7E B0 3F
0130 | 50 96 8F AA AF F1 22 30 3D 73 DD 35 E8 6F A3 AB
0140 | 8E 0F 2D 50 BC AB B6 98 C0 0E BD 04 D8 AB A4 22
0150 | 29 1C 80 CF</code></pre>
<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>
<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 = 74898DDC498AC0DB200C925B12A533A4E45EEB1F799632FF14A00A3C6
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>F0EB0C009AED7766</code></td>
<td><code>4C110D0098A77966</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 = 74898DDC498AC0DB200C925B12A533A4E45EEB1F799632FF14A00A3C6
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>BDD343628E0518351BEB12EFBCAFBB7C</code></td>
<td><code>D45A1048DD542CEB93BAF41E88DE4B74</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>20FBB91886EE0C2EBFBD51E8A5034098</code></td>
<td><code>C5377CD691F8CEDD363D8FC7FEDF3D7B</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>p</td>
<td>56, 8</td>
<td><code>044C0AF80D000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1275787277</td>
<td><code>043C6EB1A1000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1013887393</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>0467B549AF000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1739934127</td>
<td><code>045F6A7DE3000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1600814563</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 = 74898DDC498AC0DB200C925B12A533A4E45EEB1F799632FF14A00A3C6
<tr>
<td>encrypted_data</td>
<td>80, 260</td>
<td><code>FE000100A9B1176500689D99C4442CA8</code> <code>8FF80035AF58FE2A59399E4CA85D81F7</code> <code>045EAA7EC3DA61007668A9F68041B8BE</code> <code>B69BAD881EA80FFD3E9278BF660065D5</code> <code>1ACD0F2A77AAC1AD41F268F0046C63D2</code> <code>0E0910CC45D9172B3B6169EB6995AE93</code> <code>1ED126BDD155E25D1DEFFF29DB2CC809</code> <code>7383614F20D5E7B83B8F575EE521D562</code> <code>F81A9B45C944FD9AB27D548874A46D95</code> <code>7FAB7E0267328FD0058BEA4383FB02F9</code> <code>B7612490417D4033403D58A19CCE6D11</code> <code>CABE864239F39B621F7C51F6BF6A90B3</code> <code>FD8EFA5A869B6D5E25C325D235020A31</code> <code>26D3C4B65EEE0BE9FB5A5C300A7EB03F</code> <code>50968FAAAFF122303D73DD35E86FA3AB</code> <code>8E0F2D50BCABB698C00EBD04D8ABA422</code><br> <code>291C80CF</code></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>Value generated above</td>
</tr>
</tbody>
@ -402,47 +402,47 @@ random_padding_bytes = 74898DDC498AC0DB200C925B12A533A4E45EEB1F799632FF14A00A3C6
<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 F8 03 56 9B ED 77 66
0010 | A0 02 00 00 5C 07 E8 D0 BD D3 43 62 8E 05 18 35
0020 | 1B EB 12 EF BC AF BB 7C 20 FB B9 18 86 EE 0C 2E
0030 | BF BD 51 E8 A5 03 40 98 FE 50 02 00 BC 64 C0 EE
0040 | 34 0F B9 33 C2 71 8E 69 BE BC 56 F7 B8 3F 95 56
0050 | D7 EE 47 77 84 65 A4 6E 15 50 2A B2 28 FC 81 04
0060 | D9 D3 4E 62 9C F6 1E 80 F9 E4 DB 7A 9F 5F 98 F0
0070 | ED 7E 90 AE 85 79 6D 51 42 2C 98 65 1C F7 17 13
0080 | 65 A7 15 7A 64 9B AD 47 8A A4 85 35 52 14 E9 FC
0090 | BF CF 97 D4 E9 E2 EC CF 8C 0F BA AD 9F 58 60 E1
00A0 | CE DF 83 08 59 06 C7 98 51 8A 1F D9 0F 98 5A 8C
00B0 | A9 56 19 87 CA 31 C7 92 DB AD 7B 79 23 6C 35 06
00C0 | E6 4A 57 AD 83 95 D9 31 35 49 A6 A0 F6 B2 9A 60
00D0 | D6 62 6A AE 86 4B 21 5F BE 04 A5 F1 EA 06 A6 04
00E0 | 02 D3 C5 9F 3A 2E 39 84 2A DC 5B C9 DF 94 41 04
00F0 | 0B 88 B6 EF EA 01 7E D8 04 0B 28 43 FF 06 68 0A
0100 | E7 E0 A6 B8 A7 E5 93 11 F1 8B C5 09 5D 2B 65 5E
0110 | 19 CF 39 60 00 A8 BB 19 D0 EE DA B9 B5 8D 33 31
0120 | E7 DF 01 2D 80 14 EC 09 43 38 E8 6E 1D 57 F1 91
0130 | 63 A0 86 E5 DC 5D 48 9C C2 BA 30 51 B3 7B AA 2E
0140 | A2 F9 47 EC A1 31 E1 A5 79 A7 5F 10 B0 B0 59 62
0150 | DF 6C CE 97 4E 00 27 D5 EC F0 29 4E B0 4F 8B F9
0160 | 38 30 5A 92 25 DE C0 E0 20 7F DB 16 C1 C4 17 C5
0170 | 61 60 F6 F5 40 39 C1 C6 12 A3 51 12 06 90 66 B3
0180 | 8C 10 40 94 C3 AC E0 0B A5 1A 12 0D FA 2C DA E9
0190 | 7A C3 54 B8 17 2D 0C 5B E0 C2 94 C3 AC 97 31 74
01A0 | E4 FE CA 50 BD B2 EF 1D EC C3 7D E6 54 8F 4D 5A
01B0 | F3 FA 59 7A 6B E2 68 B6 94 33 C6 91 5D 85 E4 4C
01C0 | 92 24 67 61 B4 B9 DE 64 8F CE BF FB B6 8A CA C9
01D0 | 96 8E D4 5A 07 E7 98 E4 3A EF B2 58 3E F3 42 C4
01E0 | 36 BB B0 D4 B2 49 72 94 E3 67 AF 3E B4 AE 89 84
01F0 | 49 3A EE 2C F6 1D 10 00 50 8D CE B1 B2 0D D9 9B
0200 | 71 FC 5D CB 05 46 4D 49 63 D9 17 D4 F4 05 59 F3
0210 | 86 C5 B8 0A 9E BF D9 8C 1E 10 A0 0E CA 34 4A EA
0220 | 47 6B B1 B6 E2 7E 92 20 1B 63 F8 93 C8 EE 10 36
0230 | B1 3E 2B 0E 0A C3 F6 C5 EE C8 CC DE A4 C5 41 CB
0240 | 57 D8 13 2C B5 2E C6 9B 1A 64 8F 3C 16 CD A7 77
0250 | 44 86 08 9A CF 2C C0 97 76 75 09 C1 8C F5 FC 44
0260 | FF 74 41 03 38 A6 C1 AB CD B5 1E D6 26 DC AE 32
0270 | 34 79 B3 43 34 87 4C 2D 05 DD 98 FE 8E 55 F4 46
0280 | 5F 86 5E 2F CF 1C 5B F2 04 93 A2 D6</code></pre>
<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>
<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 = 74898DDC498AC0DB200C925B12A533A4E45EEB1F799632FF14A00A3C6
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>01F803569BED7766</code></td>
<td><code>01E00C5E99A77966</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>A0020000</code> (672 in decimal)</td>
<td><code>9C020000</code> (668 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -482,19 +482,19 @@ random_padding_bytes = 74898DDC498AC0DB200C925B12A533A4E45EEB1F799632FF14A00A3C6
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>BDD343628E0518351BEB12EFBCAFBB7C</code></td>
<td><code>D45A1048DD542CEB93BAF41E88DE4B74</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>20FBB91886EE0C2EBFBD51E8A5034098</code></td>
<td><code>C5377CD691F8CEDD363D8FC7FEDF3D7B</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_answer</td>
<td>56, 596</td>
<td><code>FE500200BC64C0EE340FB933C2718E69</code> <code>BEBC56F7B83F9556D7EE47778465A46E</code> <code>15502AB228FC8104D9D34E629CF61E80</code> <code>F9E4DB7A9F5F98F0ED7E90AE85796D51</code> <code>422C98651CF7171365A7157A649BAD47</code> <code>8AA485355214E9FCBFCF97D4E9E2ECCF</code> <code>8C0FBAAD9F5860E1CEDF83085906C798</code> <code>518A1FD90F985A8CA9561987CA31C792</code> <code>DBAD7B79236C3506E64A57AD8395D931</code> <code>3549A6A0F6B29A60D6626AAE864B215F</code> <code>BE04A5F1EA06A60402D3C59F3A2E3984</code> <code>2ADC5BC9DF9441040B88B6EFEA017ED8</code> <code>040B2843FF06680AE7E0A6B8A7E59311</code> <code>F18BC5095D2B655E19CF396000A8BB19</code> <code>D0EEDAB9B58D3331E7DF012D8014EC09</code> <code>4338E86E1D57F19163A086E5DC5D489C</code> <code>C2BA3051B37BAA2EA2F947ECA131E1A5</code> <code>79A75F10B0B05962DF6CCE974E0027D5</code> <code>ECF0294EB04F8BF938305A9225DEC0E0</code> <code>207FDB16C1C417C56160F6F54039C1C6</code> <code>12A35112069066B38C104094C3ACE00B</code> <code>A51A120DFA2CDAE97AC354B8172D0C5B</code> <code>E0C294C3AC973174E4FECA50BDB2EF1D</code> <code>ECC37DE6548F4D5AF3FA597A6BE268B6</code> <code>9433C6915D85E44C92246761B4B9DE64</code> <code>8FCEBFFBB68ACAC9968ED45A07E798E4</code> <code>3AEFB2583EF342C436BBB0D4B2497294</code> <code>E367AF3EB4AE8984493AEE2CF61D1000</code> <code>508DCEB1B20DD99B71FC5DCB05464D49</code> <code>63D917D4F40559F386C5B80A9EBFD98C</code> <code>1E10A00ECA344AEA476BB1B6E27E9220</code> <code>1B63F893C8EE1036B13E2B0E0AC3F6C5</code> <code>EEC8CCDEA4C541CB57D8132CB52EC69B</code> <code>1A648F3C16CDA7774486089ACF2CC097</code> <code>767509C18CF5FC44FF74410338A6C1AB</code> <code>CDB51ED626DCAE323479B34334874C2D</code> <code>05DD98FE8E55F4465F865E2FCF1C5BF2</code><br> <code>0493A2D6</code></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>See below</td>
</tr>
</tbody>
@ -502,20 +502,20 @@ random_padding_bytes = 74898DDC498AC0DB200C925B12A533A4E45EEB1F799632FF14A00A3C6
<!-- 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 = BC64C0EE340FB933C2718E69BEBC56F7B83F9556D7EE47778465A46E15502AB228FC8104D9D34E629CF61E80F9E4DB7A9F5F98F0ED7E90AE85796D51422C98651CF7171365A7157A649BAD478AA485355214E9FCBFCF97D4E9E2ECCF8C0FBAAD9F5860E1CEDF83085906C798518A1FD90F985A8CA9561987CA31C792DBAD7B79236C3506E64A57AD8395D9313549A6A0F6B29A60D6626AAE864B215FBE04A5F1EA06A60402D3C59F3A2E39842ADC5BC9DF9441040B88B6EFEA017ED8040B2843FF06680AE7E0A6B8A7E59311F18BC5095D2B655E19CF396000A8BB19D0EEDAB9B58D3331E7DF012D8014EC094338E86E1D57F19163A086E5DC5D489CC2BA3051B37BAA2EA2F947ECA131E1A579A75F10B0B05962DF6CCE974E0027D5ECF0294EB04F8BF938305A9225DEC0E0207FDB16C1C417C56160F6F54039C1C612A35112069066B38C104094C3ACE00BA51A120DFA2CDAE97AC354B8172D0C5BE0C294C3AC973174E4FECA50BDB2EF1DECC37DE6548F4D5AF3FA597A6BE268B69433C6915D85E44C92246761B4B9DE648FCEBFFBB68ACAC9968ED45A07E798E43AEFB2583EF342C436BBB0D4B2497294E367AF3EB4AE8984493AEE2CF61D1000508DCEB1B20DD99B71FC5DCB05464D4963D917D4F40559F386C5B80A9EBFD98C1E10A00ECA344AEA476BB1B6E27E92201B63F893C8EE1036B13E2B0E0AC3F6C5EEC8CCDEA4C541CB57D8132CB52EC69B1A648F3C16CDA7774486089ACF2CC097767509C18CF5FC44FF74410338A6C1ABCDB51ED626DCAE323479B34334874C2D05DD98FE8E55F4465F865E2FCF1C5BF20493A2D6
tmp_aes_key = 63BF1BC5DB02E0ADE18277C00F02786F3059DE28473FBEE7333DAB1495A9BE8C
tmp_aes_iv = D37420FF595A1B55C7F1700B81597A184B050F3DAB81CA004405375F345DF448</code></pre>
<pre><code>encrypted_answer = E5D33B92D07708033CB6363FFFCFE1F7613A2595FF75CC40AD0BDEA48EE577F643E92990D4A8AB1EC664C9E5737E2630A3D260EA25B942A655E0EEEA5EDF72FA6C811B82AF52BD436AC4D573032D27980B6BAD43485E2FA9B127EEF21605661B306BCD91A4299007FB8D1FD357DDEE2B58D90BEF5D48C6F2D216C556758B96BC9B099BFF85AD7CE5D4FE02879A271C415E70E6002365DD494F66D3DFAA4B4AE89A9474733B044A4BCE82C1DC5115F04BE13CDF2F4078CC6F415A4848E95358B76FF4892419389024729C53F90BD5B00AA7215B648DA2787DA81D2BA6832BE9948E5C91781E9945491B0046CBFB5FD49F8448A37B4D9A0BA5BB1D62942694B3E7609DFD0006394709333468EB3EFBE77B35C22F248C2162FA23DD96D3CE7FD516C41528BB00A31FEFA690BBF763086968F55577CFE9A54499C538B6E92165AF8E4828C3A67C5F3B9E37A5E9823C5332E3DDAAD419F61311B4B715B286BE0A685C738E482A6FCC0AE2DB9B6984091ACE08EF54FD5B038796928C8CEBB7A6BD3E471D78ABF32A80DB1773E2CD0678CBFB398964C35FB13F379D6014CC66C54D600B04CD4F795DB4415FFA06F3B55FE819FD7DA0D8EA563C01BF8D35712997A6EB8FE3C9ADA0070394826ABEA9BAE43E923E85A33CEA8FA82AB50DFF624282C3B1D63D6581624F6279842535560160528C768046838309814D2F666909623D84D30061ECF955022BA55A41E04F6901A83D6C152DCB07875CCD13BBCF30FD01483DE8ABC03FA61C55E3C75AD9901EBBA8FA8C61BF04DA0F8F61EBE348890243CED5DB759A9965EB0661083E1190FA4F5CBF23
tmp_aes_key = B6DCA375BD1FBCB35C5DC4AC99AF7BEEA45A673F832B617967231EB190E8344E
tmp_aes_iv = DD4D80EFB531616F749D717D8D556794F655938F3D1942FDFDA6EE4693B1FFC5</code></pre>
<!-- end server_DH_inner_data_input -->
<p>Yielding:</p>
<!-- start server_DH_inner_data_output -->
<pre><code>answer_with_hash = 1A81AC6A56C6470C624C8844979252D0C9B9E27EBA0D89B5BDD343628E0518351BEB12EFBCAFBB7C20FBB91886EE0C2EBFBD51E8A503409803000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100915F316AF2EBC858375013FB985FD5C05B1A4FA4C2EC94F8F7C2A4BF738A9759F809DE8BB085A1F96372F20B9F1DAFC0009264EC99EDD8F8482F9DFF5744EDF7956B678E6828EA91D0583D99E7B11CE97BA03B75D77CA1F5B4F360807D38C2F04902F2AC7035C5AD1A1A43D4FC3E788FCC97AE32D1E94E75D289ACDC029E3DACAFFF1164318AAE73AC2253EC7C4876C6C1E45E9664F15A44404FE352BFB50965695472CDA99DDA361135FE5C197F5783F3E26EEC18944D58513C355EF6800E8738CD7B987DD9C934441A180206EEC010FF0D1A756769850D5FAFB05DFBA967B2D0BA5D69D6888089195A07249E175A6BE0194511EA6D2FF019A81426EDAE4A229BED776696FCFCE0315A79DD
answer = BA0D89B5BDD343628E0518351BEB12EFBCAFBB7C20FBB91886EE0C2EBFBD51E8A503409803000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100915F316AF2EBC858375013FB985FD5C05B1A4FA4C2EC94F8F7C2A4BF738A9759F809DE8BB085A1F96372F20B9F1DAFC0009264EC99EDD8F8482F9DFF5744EDF7956B678E6828EA91D0583D99E7B11CE97BA03B75D77CA1F5B4F360807D38C2F04902F2AC7035C5AD1A1A43D4FC3E788FCC97AE32D1E94E75D289ACDC029E3DACAFFF1164318AAE73AC2253EC7C4876C6C1E45E9664F15A44404FE352BFB50965695472CDA99DDA361135FE5C197F5783F3E26EEC18944D58513C355EF6800E8738CD7B987DD9C934441A180206EEC010FF0D1A756769850D5FAFB05DFBA967B2D0BA5D69D6888089195A07249E175A6BE0194511EA6D2FF019A81426EDAE4A229BED776696FCFCE0315A79DD</code></pre>
<pre><code>answer_with_hash = 0BE683EFD781089554415A53EE00C8ACC6D0FFF6BA0D89B5D45A1048DD542CEB93BAF41E88DE4B74C5377CD691F8CEDD363D8FC7FEDF3D7B03000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE00010063029A5FFA59973D6B5234A550713CB9F4A5431E7E8B8FAAED49C1EAE5F3C43D0578802C15D6E7482FA09853AD5955331AFE584C3FD51E041858BE0272FE24D576D905C60533ED5B425CE9201BD6A19C818A4825B7E286B4E013F454B1C329AF49EC7A1528FF72755F8AECF04999AEBE6366B80392560CE1C5E37A4A44847AAED690472C47C043607A16008C403B6C02B31C4F2B61DEDB07B63AE4EA3816BA77AF7A2E00E64CA74D24C9FAC11B95E4389148244AC48D76DD249173174C3622FF149E8E20F92BA12EC5D265EABAD9ABF286676E8B92B8D28E10269C2533638A7D30A5A2C300180F8924FBA39A27DA6C023EFF3DAC031926BB661276C606B302D099A77966238FBC5771A739D0
answer = BA0D89B5D45A1048DD542CEB93BAF41E88DE4B74C5377CD691F8CEDD363D8FC7FEDF3D7B03000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE00010063029A5FFA59973D6B5234A550713CB9F4A5431E7E8B8FAAED49C1EAE5F3C43D0578802C15D6E7482FA09853AD5955331AFE584C3FD51E041858BE0272FE24D576D905C60533ED5B425CE9201BD6A19C818A4825B7E286B4E013F454B1C329AF49EC7A1528FF72755F8AECF04999AEBE6366B80392560CE1C5E37A4A44847AAED690472C47C043607A16008C403B6C02B31C4F2B61DEDB07B63AE4EA3816BA77AF7A2E00E64CA74D24C9FAC11B95E4389148244AC48D76DD249173174C3622FF149E8E20F92BA12EC5D265EABAD9ABF286676E8B92B8D28E10269C2533638A7D30A5A2C300180F8924FBA39A27DA6C023EFF3DAC031926BB661276C606B302D099A77966238FBC5771A739D0</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 BD D3 43 62 8E 05 18 35 1B EB 12 EF
0010 | BC AF BB 7C 20 FB B9 18 86 EE 0C 2E BF BD 51 E8
0020 | A5 03 40 98 03 00 00 00 FE 00 01 00 C7 1C AE B9
<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
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 = BA0D89B5BDD343628E0518351BEB12EFBCAFBB7C20FBB91886EE0C2EBFBD51E8A503409
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 | 91 5F 31 6A F2 EB C8 58 37 50 13 FB 98 5F D5 C0
0140 | 5B 1A 4F A4 C2 EC 94 F8 F7 C2 A4 BF 73 8A 97 59
0150 | F8 09 DE 8B B0 85 A1 F9 63 72 F2 0B 9F 1D AF C0
0160 | 00 92 64 EC 99 ED D8 F8 48 2F 9D FF 57 44 ED F7
0170 | 95 6B 67 8E 68 28 EA 91 D0 58 3D 99 E7 B1 1C E9
0180 | 7B A0 3B 75 D7 7C A1 F5 B4 F3 60 80 7D 38 C2 F0
0190 | 49 02 F2 AC 70 35 C5 AD 1A 1A 43 D4 FC 3E 78 8F
01A0 | CC 97 AE 32 D1 E9 4E 75 D2 89 AC DC 02 9E 3D AC
01B0 | AF FF 11 64 31 8A AE 73 AC 22 53 EC 7C 48 76 C6
01C0 | C1 E4 5E 96 64 F1 5A 44 40 4F E3 52 BF B5 09 65
01D0 | 69 54 72 CD A9 9D DA 36 11 35 FE 5C 19 7F 57 83
01E0 | F3 E2 6E EC 18 94 4D 58 51 3C 35 5E F6 80 0E 87
01F0 | 38 CD 7B 98 7D D9 C9 34 44 1A 18 02 06 EE C0 10
0200 | FF 0D 1A 75 67 69 85 0D 5F AF B0 5D FB A9 67 B2
0210 | D0 BA 5D 69 D6 88 80 89 19 5A 07 24 9E 17 5A 6B
0220 | E0 19 45 11 EA 6D 2F F0 19 A8 14 26 ED AE 4A 22
0230 | 9B ED 77 66</code></pre>
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>
<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 = BA0D89B5BDD343628E0518351BEB12EFBCAFBB7C20FBB91886EE0C2EBFBD51E8A503409
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>BDD343628E0518351BEB12EFBCAFBB7C</code></td>
<td><code>D45A1048DD542CEB93BAF41E88DE4B74</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>20FBB91886EE0C2EBFBD51E8A5034098</code></td>
<td><code>C5377CD691F8CEDD363D8FC7FEDF3D7B</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
@ -594,13 +594,13 @@ answer = BA0D89B5BDD343628E0518351BEB12EFBCAFBB7C20FBB91886EE0C2EBFBD51E8A503409
<tr>
<td>g_a</td>
<td>300, 260</td>
<td><code>FE000100915F316AF2EBC858375013FB</code> <code>985FD5C05B1A4FA4C2EC94F8F7C2A4BF</code> <code>738A9759F809DE8BB085A1F96372F20B</code> <code>9F1DAFC0009264EC99EDD8F8482F9DFF</code> <code>5744EDF7956B678E6828EA91D0583D99</code> <code>E7B11CE97BA03B75D77CA1F5B4F36080</code> <code>7D38C2F04902F2AC7035C5AD1A1A43D4</code> <code>FC3E788FCC97AE32D1E94E75D289ACDC</code> <code>029E3DACAFFF1164318AAE73AC2253EC</code> <code>7C4876C6C1E45E9664F15A44404FE352</code> <code>BFB50965695472CDA99DDA361135FE5C</code> <code>197F5783F3E26EEC18944D58513C355E</code> <code>F6800E8738CD7B987DD9C934441A1802</code> <code>06EEC010FF0D1A756769850D5FAFB05D</code> <code>FBA967B2D0BA5D69D6888089195A0724</code> <code>9E175A6BE0194511EA6D2FF019A81426</code><br> <code>EDAE4A22</code></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>g_a</code> diffie-hellman parameter</td>
</tr>
<tr>
<td>server_time</td>
<td>560, 4</td>
<td><code>9BED7766</code> (1719135643 in decimal)</td>
<td><code>99A77966</code> (1719248793 in decimal)</td>
<td>Server time</td>
</tr>
</tbody>
@ -609,34 +609,34 @@ answer = BA0D89B5BDD343628E0518351BEB12EFBCAFBB7C20FBB91886EE0C2EBFBD51E8A503409
<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 = 85F40B8BFC6E8574B767C1688EB24E0331A92CD2ECBE358F24CF362D93EE2DEEF61B7ADD62B9A442700CBDA83860048232597F3215540A27619DE5C975A31383BFD50332F9F7FBA8A7DF2FFDAC1A51B24A6E37A67D4363C427E1986F4769329E1C114D0D6285C05C1887BA606F296F49B145E5B0141AD6698CD8237E41494DF3F64E5C3BE577011F0CE1D82594929B3E58F35BF2ECEE5480D37871A9547DB5A5C586F3E980EA3B33BAC49A0BAFA71412004B3D6D55734673C72688DBD4C06BFA3DF9E72FBEF2261D64FCF684ABD7F2AE1627E3D86D2D4E9608644AE02447F4DBCF60C2218D2E7E255E8D3523FBB45A933E4709043E8247661F145496F9AA380A</code></pre>
<pre><code>b = 553BE1FD6D539A750269AD7421BDD77C4D961D48B0582D9DFAC6C574677F5AD262F1A98E38D3AF1683F4C32B7CCEB6820DEA4746B09608DCC3A8C4336E769C8FDCD00A8EF7FAB6F84D427759B379BD7859773B56BFD0CDA17D94D8DA330269349A6162DB4D5A40BCCFC4BD44107EA738CDA8A00258988E3768EBAB2BC14CBB72A32FDC03AACB3DE8DE6D0BADE1BAC3964FFB23CCECCB79A0B34B75F934145D131EA3431AB430F6CAFE42F52B7153E2D8701A74750455AB9EC14C63AD3E868F2143BB00B4800D4BE0ABDBECD375A55C6680D7BEB939736D750E5DA9B4FE79263E9E88BA6591A81C03399F00206B0520836B58DA0DEC9702125277FE3E7FA9EE6C</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 = 4C7F87CD92831F9C137C0E4E514710E8CACBB841CFC642D2C39623D1A675DFD8E99242C4F1E172C727F64DA6B0A265DCD3C35609A6A99CF284AAC1B14632D31AD8415C6BB963559981121E7DCC157FDB59B72AC980175AB7C605A22C759CFD2D36644BAF643984A31F86E2A00804062FBA7E9072CAC2837716E9251000C40D96EB3ECF5538565094CA1D2A499F425B6046177467028062D618B754F2534D89A2974D3BDF896139935F30C305DF67CB2BDD1D701823EDC17F1908E69FF324C33F7F830B38A08A8C11D99A0D8B01D2ED3501CEFD2B3710DC8CF4799C79F2AF844E921DCC5D583C55E6BAA618AFD49BE51D569C25CD970E1030252F808FF618CFAE</code></pre>
<pre><code>g_b = 05117351AF3C1A403AD3258BC3BED605FF9E5374F6089CB63FFC40D4E4C7A7BDC2743BB884D15BA2B68233B361C6FCFFEBE695943287A4F305895530AD810C602F27D427BB027C99B1AC81F4AAAB35A4EC4B9F6577633D6E43B8ACE3FABEA81F0C00E4C49018BA337E4E4D45D33BFD0815C6D17FA65F8963804511CFCE62327382F16AC97E372A8C584DBC21D10D6E1D4D29392EF9F8C5B01063775EC3D1945E3A106970158A94F01B2F9D1ACE7041BC0A5F1B4426453FFEC61F601589F6290316C67A38B76E42ECCDE9D1F13F1C0BD0E85AA46B0AFD8E1788E7F9732255B6B30A036C27CA35241DBA73A8274D2FA94CAA2A04A705DF6F209E07B3F3ABE92CA6</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 BD D3 43 62 8E 05 18 35 1B EB 12 EF
0010 | BC AF BB 7C 20 FB B9 18 86 EE 0C 2E BF BD 51 E8
0020 | A5 03 40 98 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | 4C 7F 87 CD 92 83 1F 9C 13 7C 0E 4E 51 47 10 E8
0040 | CA CB B8 41 CF C6 42 D2 C3 96 23 D1 A6 75 DF D8
0050 | E9 92 42 C4 F1 E1 72 C7 27 F6 4D A6 B0 A2 65 DC
0060 | D3 C3 56 09 A6 A9 9C F2 84 AA C1 B1 46 32 D3 1A
0070 | D8 41 5C 6B B9 63 55 99 81 12 1E 7D CC 15 7F DB
0080 | 59 B7 2A C9 80 17 5A B7 C6 05 A2 2C 75 9C FD 2D
0090 | 36 64 4B AF 64 39 84 A3 1F 86 E2 A0 08 04 06 2F
00A0 | BA 7E 90 72 CA C2 83 77 16 E9 25 10 00 C4 0D 96
00B0 | EB 3E CF 55 38 56 50 94 CA 1D 2A 49 9F 42 5B 60
00C0 | 46 17 74 67 02 80 62 D6 18 B7 54 F2 53 4D 89 A2
00D0 | 97 4D 3B DF 89 61 39 93 5F 30 C3 05 DF 67 CB 2B
00E0 | DD 1D 70 18 23 ED C1 7F 19 08 E6 9F F3 24 C3 3F
00F0 | 7F 83 0B 38 A0 8A 8C 11 D9 9A 0D 8B 01 D2 ED 35
0100 | 01 CE FD 2B 37 10 DC 8C F4 79 9C 79 F2 AF 84 4E
0110 | 92 1D CC 5D 58 3C 55 E6 BA A6 18 AF D4 9B E5 1D
0120 | 56 9C 25 CD 97 0E 10 30 25 2F 80 8F F6 18 CF AE</code></pre>
<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>
<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 = BA0D89B5BDD343628E0518351BEB12EFBCAFBB7C20FBB91886EE0C2EBFBD51E8A503409
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>BDD343628E0518351BEB12EFBCAFBB7C</code></td>
<td><code>D45A1048DD542CEB93BAF41E88DE4B74</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>20FBB91886EE0C2EBFBD51E8A5034098</code></td>
<td><code>C5377CD691F8CEDD363D8FC7FEDF3D7B</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>g_b</td>
<td>36, 260</td>
<td><code>FE0001004C7F87CD92831F9C137C0E4E</code> <code>514710E8CACBB841CFC642D2C39623D1</code> <code>A675DFD8E99242C4F1E172C727F64DA6</code> <code>B0A265DCD3C35609A6A99CF284AAC1B1</code> <code>4632D31AD8415C6BB963559981121E7D</code> <code>CC157FDB59B72AC980175AB7C605A22C</code> <code>759CFD2D36644BAF643984A31F86E2A0</code> <code>0804062FBA7E9072CAC2837716E92510</code> <code>00C40D96EB3ECF5538565094CA1D2A49</code> <code>9F425B6046177467028062D618B754F2</code> <code>534D89A2974D3BDF896139935F30C305</code> <code>DF67CB2BDD1D701823EDC17F1908E69F</code> <code>F324C33F7F830B38A08A8C11D99A0D8B</code> <code>01D2ED3501CEFD2B3710DC8CF4799C79</code> <code>F2AF844E921DCC5D583C55E6BAA618AF</code> <code>D49BE51D569C25CD970E1030252F808F</code><br> <code>F618CFAE</code></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>Single-byte prefix denoting length, a 256-byte (2048-bit) string, and zero bytes of padding</td>
</tr>
<tr>
@ -684,47 +684,47 @@ answer = BA0D89B5BDD343628E0518351BEB12EFBCAFBB7C20FBB91886EE0C2EBFBD51E8A503409
<!-- 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 = 54B64366BDD343628E0518351BEB12EFBCAFBB7C20FBB91886EE0C2EBFBD51E8A50340980000000000000000FE0001004C7F87CD92831F9C137C0E4E514710E8CACBB841CFC642D2C39623D1A675DFD8E99242C4F1E172C727F64DA6B0A265DCD3C35609A6A99CF284AAC1B14632D31AD8415C6BB963559981121E7DCC157FDB59B72AC980175AB7C605A22C759CFD2D36644BAF643984A31F86E2A00804062FBA7E9072CAC2837716E9251000C40D96EB3ECF5538565094CA1D2A499F425B6046177467028062D618B754F2534D89A2974D3BDF896139935F30C305DF67CB2BDD1D701823EDC17F1908E69FF324C33F7F830B38A08A8C11D99A0D8B01D2ED3501CEFD2B3710DC8CF4799C79F2AF844E921DCC5D583C55E6BAA618AFD49BE51D569C25CD970E1030252F808FF618CFAE
padding = 2C0117281AD0958C0F04A25F
tmp_aes_key = 63BF1BC5DB02E0ADE18277C00F02786F3059DE28473FBEE7333DAB1495A9BE8C
tmp_aes_iv = D37420FF595A1B55C7F1700B81597A184B050F3DAB81CA004405375F345DF448</code></pre>
<pre><code>data = 54B64366D45A1048DD542CEB93BAF41E88DE4B74C5377CD691F8CEDD363D8FC7FEDF3D7B0000000000000000FE00010005117351AF3C1A403AD3258BC3BED605FF9E5374F6089CB63FFC40D4E4C7A7BDC2743BB884D15BA2B68233B361C6FCFFEBE695943287A4F305895530AD810C602F27D427BB027C99B1AC81F4AAAB35A4EC4B9F6577633D6E43B8ACE3FABEA81F0C00E4C49018BA337E4E4D45D33BFD0815C6D17FA65F8963804511CFCE62327382F16AC97E372A8C584DBC21D10D6E1D4D29392EF9F8C5B01063775EC3D1945E3A106970158A94F01B2F9D1ACE7041BC0A5F1B4426453FFEC61F601589F6290316C67A38B76E42ECCDE9D1F13F1C0BD0E85AA46B0AFD8E1788E7F9732255B6B30A036C27CA35241DBA73A8274D2FA94CAA2A04A705DF6F209E07B3F3ABE92CA6
padding = DEE8F11B2001E4F5E7EB904F
tmp_aes_key = B6DCA375BD1FBCB35C5DC4AC99AF7BEEA45A673F832B617967231EB190E8344E
tmp_aes_iv = DD4D80EFB531616F749D717D8D556794F655938F3D1942FDFDA6EE4693B1FFC5</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 = 4D4F434D3F9C6BA064D27B62E563AC86D46F79C7334187270929F137A2F38F241113DA6F2E07B240A10079E4063081F26846395786AC9F47C73634123512C45D9A3D4733CDD63FCB91159F19D458B79193488B84D02B7F8521D7C6AA9F632558E436B0C865B201935AED75F6E4F33FE1633D1C79C9821BB62C838A1DF84DDE32AA6C5C19C872BB6A4835C6EAB93FD1C3680465210DB0E0ADEC3B155D742EBECEA4FB1E63CE68CAB77330543A7FC8ED2D2AD2A0D625BAF67E17312BE2C2D5C2C54C4A9C1C9F63BA207C7B8E301E71B8ADC1E0C8A8B9D1C6FC1618ED64D07A37A7DCF9ED2DB758098F88419644B5422EFD62710E46D0859A224CF4B5652E3FE7E3C4C3BBC675AB96772904B857D2D8E76ADF5032A6D6AFFAE0D4EA3F9183B2BC2461678716F118E0F735E28A558FF6BE33668C9666EA6B68049C635C344783A568C59D061480A4A8EB4936FCCF6117F272</code></pre>
<pre><code>encrypted_data = 1A579496107925531B376D709AAC2A7817B1E1D22CD1A40B24B07CCEC9A63A9367BEE0B1986B225490E6C01CC07960DD8C3AAA1C00D71C2FFDBEEEB136A0D012EED1F00EA4A8ED4D46A06EFE148D6BB2200365C653E6D7B9362792469B26C29735EFE78F06606A75A56B59091FC996E632F02E05BD3D1872C1B3FAAACD9CCF223611B60121FCF921BCB6ACE58852371D6184477D0AB01BBE61D30D57FB1E34F657E229567099820C630F2BF4C431866147C03127347E762DE1E514BF06647E85C2E1901813AA328052F78F26396B8DC193A00C4E15FA32F1CFBC452B3A051715F2F152814826A24F8D07CCDF7B73DC45D5EE0B1ADF389160909DC267C38B182A272C99A24484B376DA78B61A648F9B9819B8F3387BD9E7D72E604771DA38CC3580C21A580051537B0CDDE8107A5680058AD757846AE7487E4F2E51CB21F9D04E49AE9E047294FEB543DC60189A0BA8EC</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 5B 05 00 9B ED 77 66
0010 | 78 01 00 00 1F 5F 04 F5 BD D3 43 62 8E 05 18 35
0020 | 1B EB 12 EF BC AF BB 7C 20 FB B9 18 86 EE 0C 2E
0030 | BF BD 51 E8 A5 03 40 98 FE 50 01 00 4D 4F 43 4D
0040 | 3F 9C 6B A0 64 D2 7B 62 E5 63 AC 86 D4 6F 79 C7
0050 | 33 41 87 27 09 29 F1 37 A2 F3 8F 24 11 13 DA 6F
0060 | 2E 07 B2 40 A1 00 79 E4 06 30 81 F2 68 46 39 57
0070 | 86 AC 9F 47 C7 36 34 12 35 12 C4 5D 9A 3D 47 33
0080 | CD D6 3F CB 91 15 9F 19 D4 58 B7 91 93 48 8B 84
0090 | D0 2B 7F 85 21 D7 C6 AA 9F 63 25 58 E4 36 B0 C8
00A0 | 65 B2 01 93 5A ED 75 F6 E4 F3 3F E1 63 3D 1C 79
00B0 | C9 82 1B B6 2C 83 8A 1D F8 4D DE 32 AA 6C 5C 19
00C0 | C8 72 BB 6A 48 35 C6 EA B9 3F D1 C3 68 04 65 21
00D0 | 0D B0 E0 AD EC 3B 15 5D 74 2E BE CE A4 FB 1E 63
00E0 | CE 68 CA B7 73 30 54 3A 7F C8 ED 2D 2A D2 A0 D6
00F0 | 25 BA F6 7E 17 31 2B E2 C2 D5 C2 C5 4C 4A 9C 1C
0100 | 9F 63 BA 20 7C 7B 8E 30 1E 71 B8 AD C1 E0 C8 A8
0110 | B9 D1 C6 FC 16 18 ED 64 D0 7A 37 A7 DC F9 ED 2D
0120 | B7 58 09 8F 88 41 96 44 B5 42 2E FD 62 71 0E 46
0130 | D0 85 9A 22 4C F4 B5 65 2E 3F E7 E3 C4 C3 BB C6
0140 | 75 AB 96 77 29 04 B8 57 D2 D8 E7 6A DF 50 32 A6
0150 | D6 AF FA E0 D4 EA 3F 91 83 B2 BC 24 61 67 87 16
0160 | F1 18 E0 F7 35 E2 8A 55 8F F6 BE 33 66 8C 96 66
0170 | EA 6B 68 04 9C 63 5C 34 47 83 A5 68 C5 9D 06 14
0180 | 80 A4 A8 EB 49 36 FC CF 61 17 F2 72</code></pre>
<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>
<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>CC5B05009BED7766</code></td>
<td><code>9C30060099A77966</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>BDD343628E0518351BEB12EFBCAFBB7C</code></td>
<td><code>D45A1048DD542CEB93BAF41E88DE4B74</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>20FBB91886EE0C2EBFBD51E8A5034098</code></td>
<td><code>C5377CD691F8CEDD363D8FC7FEDF3D7B</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_data</td>
<td>56, 340</td>
<td><code>FE5001004D4F434D3F9C6BA064D27B62</code> <code>E563AC86D46F79C7334187270929F137</code> <code>A2F38F241113DA6F2E07B240A10079E4</code> <code>063081F26846395786AC9F47C7363412</code> <code>3512C45D9A3D4733CDD63FCB91159F19</code> <code>D458B79193488B84D02B7F8521D7C6AA</code> <code>9F632558E436B0C865B201935AED75F6</code> <code>E4F33FE1633D1C79C9821BB62C838A1D</code> <code>F84DDE32AA6C5C19C872BB6A4835C6EA</code> <code>B93FD1C3680465210DB0E0ADEC3B155D</code> <code>742EBECEA4FB1E63CE68CAB77330543A</code> <code>7FC8ED2D2AD2A0D625BAF67E17312BE2</code> <code>C2D5C2C54C4A9C1C9F63BA207C7B8E30</code> <code>1E71B8ADC1E0C8A8B9D1C6FC1618ED64</code> <code>D07A37A7DCF9ED2DB758098F88419644</code> <code>B5422EFD62710E46D0859A224CF4B565</code> <code>2E3FE7E3C4C3BBC675AB96772904B857</code> <code>D2D8E76ADF5032A6D6AFFAE0D4EA3F91</code> <code>83B2BC2461678716F118E0F735E28A55</code> <code>8FF6BE33668C9666EA6B68049C635C34</code> <code>4783A568C59D061480A4A8EB4936FCCF</code><br> <code>6117F272</code></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>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 = 4CD3C3FF187CD37E9662FB897FBB2AE7A0FC0605E197D9E38679098F6E14733C9467624818FC014391A76FB45183D0AE8BF5F93769A1391F8FC19BAE426367A4B7A756F693342FD96A66F20C6C2637495377F7FF327EF401A28828C6759EA8CFC13AF4CC3A89CA20C1C940CEF532C7885349B5CE96963BEFB2ED64E56997E87B25E2A6DBC7072C48E6859D551252A6DB73F8DA90637A8E260D7B594E75AAFA1630815853B176EBD0B2CDF9F0DD0610942C1A862F9AD477C54ED5C2286A14F043E98711310B2A9CA0C756CA68585193E692C43C61015EBEB95CF9D81A9A714B97882F250D047AE9C3669F0BDA33F8A5729B6528917CA48F4E3A45B156121CC968</code></pre>
<pre><code>auth_key = 0BF99E1B1020531057E407D8CA793759EAB5D8BA2E88F7719EB6EA3ADDD458067BA11914DBE76F5FF192A7CA383CB65E1F977FCAFF69057B04E196DCFCF973C951BD35D649101125498227D4D31E678E7F0F2AA4C0B0A182D33EB850CB2471ADEE4FAD7A6C88AB91AA327A4D391C0046A055E5A6E5CB2D2AC7E9E9FD7BC7C75DDEC706788C0023920FB6A82B33E299762117A849F339F2D256625C46AA77D32EFDEA030AD6A44EEDE98AB85718F2F3C66B59892C3A0E546F11B8B77741FACBA65352FB926B3B6FFA254140C0FE7CA83029FD4F9BBDCA3A54AD45A109E572D4E2DC3A17F9A3AD7ACF6EF796E1621865823F31A1774968EF01A5F1259FEA423BD9</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 68 5C E9 9B ED 77 66
0010 | B0 00 00 00 34 F7 CB 3B BD D3 43 62 8E 05 18 35
0020 | 1B EB 12 EF BC AF BB 7C 20 FB B9 18 86 EE 0C 2E
0030 | BF BD 51 E8 A5 03 40 98 BE BA 32 DD A2 AC 6F 94
0040 | 07 61 48 8F 7B 8E C3 03</code></pre>
<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>
<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>01685CE99BED7766</code></td>
<td><code>013C46349AA77966</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>B0000000</code> (176 in decimal)</td>
<td><code>68000000</code> (104 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>BDD343628E0518351BEB12EFBCAFBB7C</code></td>
<td><code>D45A1048DD542CEB93BAF41E88DE4B74</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>20FBB91886EE0C2EBFBD51E8A5034098</code></td>
<td><code>C5377CD691F8CEDD363D8FC7FEDF3D7B</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce_hash1</td>
<td>56, 16</td>
<td><code>BEBA32DDA2AC6F940761488F7B8EC303</code></td>
<td><code>6A7C96A2B73A3CA08A992AC5EA4756D0</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>