Update content of files

This commit is contained in:
GitHub Action 2023-12-06 18:20:49 +00:00
parent 05e798d4e6
commit 73be685759
8 changed files with 249 additions and 249 deletions

View file

@ -80,7 +80,7 @@
<p>Also, the following changes were made to existing <a href="/api/web-events">web events</a>:</p>
<ul>
<li><a href="/api/web-events#web-app-open-link">web_app_open_link »</a> events have now a 1-second inactivity TTL instead of 10 seconds, see <a href="/api/web-events#web-app-open-link">here »</a> for more info.</li>
<li><a href="/api/web-events#web-app-open-link">web_app_open_link</a> now has an optional <code>try_instant_view</code> field that if set, equal to <code>true</code> and if the scheme of the passed <code>url</code> is either <code>http</code> or <code>https</code>, indicates the link should be opened in <a href="/methods#working-with-instant-view-pages">Instant View mode</a> if possible.</li>
<li><a href="/api/web-events#web-app-open-link">web_app_open_link »</a> now has an optional <code>try_instant_view</code> field that if set, equal to <code>true</code> and if the scheme of the passed <code>url</code> is either <code>http</code> or <code>https</code>, indicates the link should be opened in <a href="/methods#working-with-instant-view-pages">Instant View mode</a> if possible.</li>
</ul>
<h4><a class="anchor" href="#schema-changes" id="schema-changes" name="schema-changes"><i class="anchor-icon"></i></a>Schema changes</h4>
<h5><a class="anchor" href="#new-methods" id="new-methods" name="new-methods"><i class="anchor-icon"></i></a>New Methods</h5>

View file

@ -42,7 +42,7 @@
<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/inputTakeoutFileLocation" >inputTakeoutFileLocation</a></li></ul></div>
<h1 id="dev_page_title">inputTakeoutFileLocation</h1>
<div id="dev_page_content"><p>Empty constructor for takeout</p>
<div id="dev_page_content"><p>Used to download a JSON file that will contain all personal data related to features that do not have a specialized <a href="/api/takeout">takeout method</a> yet, see <a href="/api/takeout">here »</a> for more info on the takeout API.</p>
<p><div class="clearfix">
<ul class="dev_layer_select slightly-pull-right nav nav-pills">
<li class="dropdown">

View file

@ -324,41 +324,6 @@ Look for updates of telegram&#39;s terms of service…">
</tr>
</tbody>
</table>
<h3><a class="anchor" href="#working-with-gdpr-export" id="working-with-gdpr-export" name="working-with-gdpr-export"><i class="anchor-icon"></i></a>Working with GDPR export</h3>
<table class="table">
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/method/account.initTakeoutSession">account.initTakeoutSession</a></td>
<td>Initialize account takeout session</td>
</tr>
<tr>
<td><a href="/method/account.finishTakeoutSession">account.finishTakeoutSession</a></td>
<td>Finish account takeout session</td>
</tr>
<tr>
<td><a href="/method/messages.getSplitRanges">messages.getSplitRanges</a></td>
<td>Get message ranges for saving the user's chat history</td>
</tr>
<tr>
<td><a href="/method/channels.getLeftChannels">channels.getLeftChannels</a></td>
<td>Get a list of <a href="/api/channel">channels/supergroups</a> we left</td>
</tr>
<tr>
<td><a href="/method/invokeWithMessagesRange">invokeWithMessagesRange</a></td>
<td>Invoke with the given message range</td>
</tr>
<tr>
<td><a href="/method/invokeWithTakeout">invokeWithTakeout</a></td>
<td>Invoke a method within a takeout session</td>
</tr>
</tbody>
</table>
<h3><a class="anchor" href="#working-with-gifs-actually-mpeg4-gifs" id="working-with-gifs-actually-mpeg4-gifs" name="working-with-gifs-actually-mpeg4-gifs"><i class="anchor-icon"></i></a>Working with GIFs (actually MPEG4 GIFs)</h3>
<table class="table">
<thead>
@ -1332,7 +1297,7 @@ Look for updates of telegram&#39;s terms of service…">
</tr>
<tr>
<td><a href="/method/bots.invokeWebViewCustomMethod">bots.invokeWebViewCustomMethod</a></td>
<td>Send a custom request from a <a href="/api/bots/webapps">mini bot app</a></td>
<td>Send a custom request from a <a href="/api/bots/webapps">mini bot app</a>, triggered by a <a href="/api/web-events#web-app-invoke-custom-method">web_app_invoke_custom_method event »</a>.<br><br>The response should be sent using a <a href="/api/bots/webapps#custom-method-invoked">custom_method_invoked</a> event, <a href="/api/web-events#web-app-invoke-custom-method">see here »</a> for more info on the flow.</td>
</tr>
</tbody>
</table>
@ -1943,7 +1908,7 @@ Look for updates of telegram&#39;s terms of service…">
</tr>
<tr>
<td><a href="/method/contacts.getSaved">contacts.getSaved</a></td>
<td>Get all contacts</td>
<td>Get all contacts, requires a <a href="/api/takeout">takeout session, see here » for more info</a>.</td>
</tr>
<tr>
<td><a href="/method/contacts.getStatuses">contacts.getStatuses</a></td>
@ -2840,6 +2805,41 @@ Look for updates of telegram&#39;s terms of service…">
</tr>
</tbody>
</table>
<h3><a class="anchor" href="#working-with-the-takeout-api-see-here--for-more-info" id="working-with-the-takeout-api-see-here--for-more-info" name="working-with-the-takeout-api-see-here--for-more-info"><i class="anchor-icon"></i></a>Working with the <a href="/api/takeout">takeout API, see here » for more info</a>.</h3>
<table class="table">
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/method/account.initTakeoutSession">account.initTakeoutSession</a></td>
<td>Initialize a <a href="/api/takeout">takeout session, see here » for more info</a>.</td>
</tr>
<tr>
<td><a href="/method/account.finishTakeoutSession">account.finishTakeoutSession</a></td>
<td>Terminate a <a href="/api/takeout">takeout session, see here » for more info</a>.</td>
</tr>
<tr>
<td><a href="/method/messages.getSplitRanges">messages.getSplitRanges</a></td>
<td>Get message ranges for saving the user's chat history</td>
</tr>
<tr>
<td><a href="/method/channels.getLeftChannels">channels.getLeftChannels</a></td>
<td>Get a list of <a href="/api/channel">channels/supergroups</a> we left, requires a <a href="/api/takeout">takeout session, see here » for more info</a>.</td>
</tr>
<tr>
<td><a href="/method/invokeWithMessagesRange">invokeWithMessagesRange</a></td>
<td>Invoke with the given message range</td>
</tr>
<tr>
<td><a href="/method/invokeWithTakeout">invokeWithTakeout</a></td>
<td>Invoke a method within a <a href="/api/takeout">takeout session, see here » for more info</a>.</td>
</tr>
</tbody>
</table>
<h3><a class="anchor" href="#working-with-the-bot-menu-button-" id="working-with-the-bot-menu-button-" name="working-with-the-bot-menu-button-"><i class="anchor-icon"></i></a>Working with the bot <a href="/bots/webapps#launching-mini-apps-from-the-menu-button">menu button »</a></h3>
<table class="table">
<thead>

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 38 90 08 00 16 96 6F 65
0010 | 14 00 00 00 F1 8E 7E BE 60 A4 66 1D F2 9F 2D 88
0020 | C0 27 52 BD D7 77 C0 EA</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 90 0A 0C 00 61 A8 70 65
0010 | 14 00 00 00 F1 8E 7E BE 71 4B B1 C3 0B B2 D2 9E
0020 | 0D A3 4A 1E D3 72 C3 D6</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>3890080016966F65</code></td>
<td><code>900A0C0061A87065</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>60A4661DF29F2D88C02752BDD777C0EA</code></td>
<td><code>714BB1C30BB2D29E0DA34A1ED372C3D6</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 A8 8A 89 16 96 6F 65
0010 | CC 00 00 00 63 24 16 05 60 A4 66 1D F2 9F 2D 88
0020 | C0 27 52 BD D7 77 C0 EA C9 9B 0B 86 CC DD D6 5E
0030 | 85 5C 0C 7D AE 5F 05 FB 08 28 19 65 5D 31 AC 69
0040 | 7F 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 88 20 C8 61 A8 70 65
0010 | B4 00 00 00 63 24 16 05 71 4B B1 C3 0B B2 D2 9E
0020 | 0D A3 4A 1E D3 72 C3 D6 6D 43 E5 FE 7F 4B 90 E8
0030 | 0C 49 C1 D2 AF FE FB CC 08 16 02 19 B9 66 B6 E4
0040 | CF 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>01A88A8916966F65</code></td>
<td><code>018820C861A87065</code></td>
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() &lt;&lt; 32) + (N*4)</td>
</tr>
<tr>
<td>message_length</td>
<td>16, 4</td>
<td><code>CC000000</code> (204 in decimal)</td>
<td><code>B4000000</code> (180 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -150,19 +150,19 @@
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>60A4661DF29F2D88C02752BDD777C0EA</code></td>
<td><code>714BB1C30BB2D29E0DA34A1ED372C3D6</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>C99B0B86CCDDD65E855C0C7DAE5F05FB</code></td>
<td><code>6D43E5FE7F4B90E80C49C1D2AFFEFBCC</code></td>
<td>Server-generated random number</td>
</tr>
<tr>
<td>pq</td>
<td>56, 12</td>
<td><code>082819655D31AC697F000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2889452086874630527</td>
<td><code>08160219B966B6E4CF000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1585858302870742223</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 = 2889452086874630527</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>2889452086874630527 = 1512121901 * 1910859227</code></p>
<pre><code>p = 1512121901
q = 1910859227</code></pre>
<pre><code>pq = 1585858302870742223</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>1585858302870742223 = 1057715569 * 1499323967</code></p>
<pre><code>p = 1057715569
q = 1499323967</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 28 19 65 5D 31 AC 69 7F 00 00 00
0010 | 04 5A 21 26 2D 00 00 00 04 71 E5 65 DB 00 00 00
0020 | 60 A4 66 1D F2 9F 2D 88 C0 27 52 BD D7 77 C0 EA
0030 | C9 9B 0B 86 CC DD D6 5E 85 5C 0C 7D AE 5F 05 FB
0040 | 3A 68 70 9D 66 35 FF 73 A8 1B D6 C4 B3 DF FA F0
0050 | 4C 56 75 A6 51 D6 1A 03 6C 22 AB B6 B8 83 41 41
<pre><code>0000 | 95 5F F5 A9 08 16 02 19 B9 66 B6 E4 CF 00 00 00
0010 | 04 3F 0B 75 71 00 00 00 04 59 5D DE 3F 00 00 00
0020 | 71 4B B1 C3 0B B2 D2 9E 0D A3 4A 1E D3 72 C3 D6
0030 | 6D 43 E5 FE 7F 4B 90 E8 0C 49 C1 D2 AF FE FB CC
0040 | 72 E9 8A BF 26 1B FD 56 13 43 90 79 F4 7A 6B CC
0050 | 42 3C D3 A1 98 79 5E C7 6C 18 7E 50 46 E2 2E 7E
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 = 1910859227</code></pre>
<tr>
<td>pq</td>
<td>4, 12</td>
<td><code>082819655D31AC697F000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2889452086874630527</td>
<td><code>08160219B966B6E4CF000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1585858302870742223</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>045A21262D000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1512121901</td>
<td><code>043F0B7571000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1057715569</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>0471E565DB000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1910859227</td>
<td><code>04595DDE3F000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1499323967</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>60A4661DF29F2D88C02752BDD777C0EA</code></td>
<td><code>714BB1C30BB2D29E0DA34A1ED372C3D6</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>48, 16</td>
<td><code>C99B0B86CCDDD65E855C0C7DAE5F05FB</code></td>
<td><code>6D43E5FE7F4B90E80C49C1D2AFFEFBCC</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce</td>
<td>64, 32</td>
<td><code>3A68709D6635FF73A81BD6C4B3DFFAF0</code> <code>4C5675A651D61A036C22ABB6B8834141</code></td>
<td><code>72E98ABF261BFD5613439079F47A6BCC</code> <code>423CD3A198795EC76C187E5046E22E7E</code></td>
<td>Client-generated random number</td>
</tr>
<tr>
@ -291,39 +291,39 @@ q = 1910859227</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 = 955FF5A9082819655D31AC697F000000045A21262D0000000471E565DB00000060A4661DF29F2D88C02752BDD777C0EAC99B0B86CCDDD65E855C0C7DAE5F05FB3A68709D6635FF73A81BD6C4B3DFFAF04C5675A651D61A036C22ABB6B883414102000000
random_padding_bytes = EA9C0F23B9F7D66C4C9358CDAAEA0EB07F1C283012543E5C9623AE14811F68C16A62AEC2BF150EEF71985F687041A1C737EC5FA791F7A76B65CF2FFB2E3A00083B31922BDDE7C2155A2C25EB440EBFF36BC7818E33723593FDFF1817</code></pre>
<pre><code>data = 955FF5A908160219B966B6E4CF000000043F0B757100000004595DDE3F000000714BB1C30BB2D29E0DA34A1ED372C3D66D43E5FE7F4B90E80C49C1D2AFFEFBCC72E98ABF261BFD5613439079F47A6BCC423CD3A198795EC76C187E5046E22E7E02000000
random_padding_bytes = 01F8D5324DEBFE218C34AA9097EB801DE041D93EB5434C6B3C1A252C8151BA9E00C1274726C7A4727CBB5ED09B8B0C83F0E141F475AD8399B41B4470783F727CE364C299F5C9036FD533A2E382567605EB3D7F92907766111C649CC8</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 = 14C3DEF474D1170E440780B6232705AB1E82F1D3956FA873FDD141972B87FCFB053A424A8602DE811956E40DDE34789EDEA4C4E8F093FBC58ED9B96D7D2AB485B1BC6EC3CFCDC0F2EDDE2435BB213952C98B3052CBA5847FD984D7FF978A92EF56E96D28DF5B0563634491A4D81A5CFF779E0792A06F8B739CC625D697BC45F186107053EB8B865172743ECA58ECB89F96D0D08B407A093FE11FF874B338F6636A4A70C34A04A716758D3B46118A1AC050A248AF9BDDF0388BC95FAA60704D66C2D3A5B22944FE6D8C89D7FEC9C5085B38D43DD91410F3F96D282C27A366195519BF40A14CD811577F94A02D8F7A164FC50404EF5526EB521D41774E92224381</code></pre>
<pre><code>encrypted_data = 4EA2380641698C2596000043E7D90FE474A067D6FA95E763F78A098B4C5B43EA7554676363D4C0AF73359317E20272DD3FBBA6F43F6A79D4E6994E35850896A7AE793D43A21ECABFA4BBFB39537FD30121551BAF514224A89BE8D0BF088203596A17B4490CB4A9810B2DF800A32F33FB4FF8FFEE551478F7848D3861DAA94C0D6C497B7F22E90C7F9678C84C234952A3BA4533EFF7F1A0F6F08BD9EC77DCF2CB50D5C6689DD4C1955BAD8C7E2678482BB3C55F19639A59BBF682B9E0E46BBC27D97EDF3473F6C487312E23A48A9E07504203D5031C39F79053FFE356359ECE4FDEB94805E217DC7FBFDDED9803A4C63AE336441A86F8697512D6B78D62745B61</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 C4 8C 0C 00 16 96 6F 65
0010 | 40 01 00 00 BE E4 12 D7 60 A4 66 1D F2 9F 2D 88
0020 | C0 27 52 BD D7 77 C0 EA C9 9B 0B 86 CC DD D6 5E
0030 | 85 5C 0C 7D AE 5F 05 FB 04 5A 21 26 2D 00 00 00
0040 | 04 71 E5 65 DB 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 14 C3 DE F4 74 D1 17 0E 44 07 80 B6
0060 | 23 27 05 AB 1E 82 F1 D3 95 6F A8 73 FD D1 41 97
0070 | 2B 87 FC FB 05 3A 42 4A 86 02 DE 81 19 56 E4 0D
0080 | DE 34 78 9E DE A4 C4 E8 F0 93 FB C5 8E D9 B9 6D
0090 | 7D 2A B4 85 B1 BC 6E C3 CF CD C0 F2 ED DE 24 35
00A0 | BB 21 39 52 C9 8B 30 52 CB A5 84 7F D9 84 D7 FF
00B0 | 97 8A 92 EF 56 E9 6D 28 DF 5B 05 63 63 44 91 A4
00C0 | D8 1A 5C FF 77 9E 07 92 A0 6F 8B 73 9C C6 25 D6
00D0 | 97 BC 45 F1 86 10 70 53 EB 8B 86 51 72 74 3E CA
00E0 | 58 EC B8 9F 96 D0 D0 8B 40 7A 09 3F E1 1F F8 74
00F0 | B3 38 F6 63 6A 4A 70 C3 4A 04 A7 16 75 8D 3B 46
0100 | 11 8A 1A C0 50 A2 48 AF 9B DD F0 38 8B C9 5F AA
0110 | 60 70 4D 66 C2 D3 A5 B2 29 44 FE 6D 8C 89 D7 FE
0120 | C9 C5 08 5B 38 D4 3D D9 14 10 F3 F9 6D 28 2C 27
0130 | A3 66 19 55 19 BF 40 A1 4C D8 11 57 7F 94 A0 2D
0140 | 8F 7A 16 4F C5 04 04 EF 55 26 EB 52 1D 41 77 4E
0150 | 92 22 43 81</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 94 0A 0C 00 61 A8 70 65
0010 | 40 01 00 00 BE E4 12 D7 71 4B B1 C3 0B B2 D2 9E
0020 | 0D A3 4A 1E D3 72 C3 D6 6D 43 E5 FE 7F 4B 90 E8
0030 | 0C 49 C1 D2 AF FE FB CC 04 3F 0B 75 71 00 00 00
0040 | 04 59 5D DE 3F 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 4E A2 38 06 41 69 8C 25 96 00 00 43
0060 | E7 D9 0F E4 74 A0 67 D6 FA 95 E7 63 F7 8A 09 8B
0070 | 4C 5B 43 EA 75 54 67 63 63 D4 C0 AF 73 35 93 17
0080 | E2 02 72 DD 3F BB A6 F4 3F 6A 79 D4 E6 99 4E 35
0090 | 85 08 96 A7 AE 79 3D 43 A2 1E CA BF A4 BB FB 39
00A0 | 53 7F D3 01 21 55 1B AF 51 42 24 A8 9B E8 D0 BF
00B0 | 08 82 03 59 6A 17 B4 49 0C B4 A9 81 0B 2D F8 00
00C0 | A3 2F 33 FB 4F F8 FF EE 55 14 78 F7 84 8D 38 61
00D0 | DA A9 4C 0D 6C 49 7B 7F 22 E9 0C 7F 96 78 C8 4C
00E0 | 23 49 52 A3 BA 45 33 EF F7 F1 A0 F6 F0 8B D9 EC
00F0 | 77 DC F2 CB 50 D5 C6 68 9D D4 C1 95 5B AD 8C 7E
0100 | 26 78 48 2B B3 C5 5F 19 63 9A 59 BB F6 82 B9 E0
0110 | E4 6B BC 27 D9 7E DF 34 73 F6 C4 87 31 2E 23 A4
0120 | 8A 9E 07 50 42 03 D5 03 1C 39 F7 90 53 FF E3 56
0130 | 35 9E CE 4F DE B9 48 05 E2 17 DC 7F BF DD ED 98
0140 | 03 A4 C6 3A E3 36 44 1A 86 F8 69 75 12 D6 B7 8D
0150 | 62 74 5B 61</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 = EA9C0F23B9F7D66C4C9358CDAAEA0EB07F1C283012543E5C9623AE148
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>C48C0C0016966F65</code></td>
<td><code>940A0C0061A87065</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 = EA9C0F23B9F7D66C4C9358CDAAEA0EB07F1C283012543E5C9623AE148
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>60A4661DF29F2D88C02752BDD777C0EA</code></td>
<td><code>714BB1C30BB2D29E0DA34A1ED372C3D6</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>C99B0B86CCDDD65E855C0C7DAE5F05FB</code></td>
<td><code>6D43E5FE7F4B90E80C49C1D2AFFEFBCC</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>p</td>
<td>56, 8</td>
<td><code>045A21262D000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1512121901</td>
<td><code>043F0B7571000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1057715569</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>0471E565DB000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1910859227</td>
<td><code>04595DDE3F000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1499323967</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 = EA9C0F23B9F7D66C4C9358CDAAEA0EB07F1C283012543E5C9623AE148
<tr>
<td>encrypted_data</td>
<td>80, 260</td>
<td><code>FE00010014C3DEF474D1170E440780B6</code> <code>232705AB1E82F1D3956FA873FDD14197</code> <code>2B87FCFB053A424A8602DE811956E40D</code> <code>DE34789EDEA4C4E8F093FBC58ED9B96D</code> <code>7D2AB485B1BC6EC3CFCDC0F2EDDE2435</code> <code>BB213952C98B3052CBA5847FD984D7FF</code> <code>978A92EF56E96D28DF5B0563634491A4</code> <code>D81A5CFF779E0792A06F8B739CC625D6</code> <code>97BC45F186107053EB8B865172743ECA</code> <code>58ECB89F96D0D08B407A093FE11FF874</code> <code>B338F6636A4A70C34A04A716758D3B46</code> <code>118A1AC050A248AF9BDDF0388BC95FAA</code> <code>60704D66C2D3A5B22944FE6D8C89D7FE</code> <code>C9C5085B38D43DD91410F3F96D282C27</code> <code>A366195519BF40A14CD811577F94A02D</code> <code>8F7A164FC50404EF5526EB521D41774E</code><br> <code>92224381</code></td>
<td><code>FE0001004EA2380641698C2596000043</code> <code>E7D90FE474A067D6FA95E763F78A098B</code> <code>4C5B43EA7554676363D4C0AF73359317</code> <code>E20272DD3FBBA6F43F6A79D4E6994E35</code> <code>850896A7AE793D43A21ECABFA4BBFB39</code> <code>537FD30121551BAF514224A89BE8D0BF</code> <code>088203596A17B4490CB4A9810B2DF800</code> <code>A32F33FB4FF8FFEE551478F7848D3861</code> <code>DAA94C0D6C497B7F22E90C7F9678C84C</code> <code>234952A3BA4533EFF7F1A0F6F08BD9EC</code> <code>77DCF2CB50D5C6689DD4C1955BAD8C7E</code> <code>2678482BB3C55F19639A59BBF682B9E0</code> <code>E46BBC27D97EDF3473F6C487312E23A4</code> <code>8A9E07504203D5031C39F79053FFE356</code> <code>359ECE4FDEB94805E217DC7FBFDDED98</code> <code>03A4C63AE336441A86F8697512D6B78D</code><br> <code>62745B61</code></td>
<td>Value generated above</td>
</tr>
</tbody>
@ -402,47 +402,47 @@ random_padding_bytes = EA9C0F23B9F7D66C4C9358CDAAEA0EB07F1C283012543E5C9623AE148
<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 9C 52 2C 17 96 6F 65
0010 | F4 02 00 00 5C 07 E8 D0 60 A4 66 1D F2 9F 2D 88
0020 | C0 27 52 BD D7 77 C0 EA C9 9B 0B 86 CC DD D6 5E
0030 | 85 5C 0C 7D AE 5F 05 FB FE 50 02 00 39 C2 86 3F
0040 | 1F E5 AE 55 69 77 08 3D 94 B9 88 9E 67 DC 46 75
0050 | 8F 36 A1 A2 67 C6 37 09 19 3F 10 8D CF 7F 2B 2C
0060 | 60 B2 55 8D 1E 57 89 F2 ED 21 44 D9 B7 A9 E3 9E
0070 | 0F DB 4E A8 32 D5 1A 8E AE E5 E1 57 32 2A 59 DE
0080 | 71 22 53 F8 5C 34 4C C8 2B 22 B7 41 BA 96 42 D5
0090 | 15 12 07 C5 83 44 8D CA DD DD A6 4B F6 E2 F7 BF
00A0 | CC 4D D6 64 A0 C0 45 C8 5D 07 86 90 3E EC C8 F1
00B0 | A1 8E BB 19 20 FE DE 0B 75 DD 79 F3 0E 53 5D A1
00C0 | 51 28 90 57 0F 8B 1A 3E 20 C4 D4 4F 84 98 86 D3
00D0 | A8 E7 8E 81 EF B0 4D 11 DC BA 39 29 B6 11 23 DD
00E0 | C1 1D 65 6D AE 2E 5F 3D 7F 8F 18 AF 24 35 30 A3
00F0 | 09 30 75 63 83 2C 8C CE 7F F0 1B C7 D6 9D B1 40
0100 | 39 B9 E7 8D B8 EF 24 6B D4 12 79 AB 20 95 C2 1A
0110 | 09 AD E3 CC E0 20 61 7E 46 76 3A D9 0E 9B 71 73
0120 | 23 2C CF 17 21 1A 6F BA 74 54 8B B6 57 74 79 B1
0130 | 60 B7 0D A8 24 35 CD 10 12 55 50 AC BC C5 E5 E3
0140 | 05 9D B4 1F 5C 6E C3 DB F0 CE C9 AD 6E A0 E0 30
0150 | EA 6A B9 F8 BC 4F 7B 1C C0 8A F6 9D 8E 5E 1F C7
0160 | FC E9 E6 DA C3 1E 15 21 C0 9D AA 13 BD 40 E1 7E
0170 | 1A 1B 3E 46 02 59 C3 C0 5C 85 A3 CB 26 60 48 69
0180 | 1C A8 79 C5 5D D2 B2 1F B2 91 93 70 D4 A4 1A 69
0190 | EC C8 C8 AA 8D C8 BC 89 50 C6 BA F8 30 A6 8B 75
01A0 | BA 81 A8 3A F4 20 B8 42 FF BF 2B 9F 78 1A 23 94
01B0 | 18 9B 82 57 0E 2F 2B 85 4E 47 06 80 15 20 E4 CE
01C0 | AB 36 95 26 C5 40 54 25 27 0B 72 E8 17 A4 F3 2A
01D0 | E6 4A 29 D9 4A B0 B2 F1 99 EF CE CB FE 1B 86 0D
01E0 | 5E B0 B8 C8 20 8E 15 61 2D EB 9E CB 32 81 28 18
01F0 | 53 5D EB 09 13 5F 63 29 62 67 7C 62 7B 09 61 4B
0200 | 2F 30 48 B6 CE 20 6D 18 C4 30 E1 6E 59 FD 4F 04
0210 | C6 04 FA E1 C0 27 C9 42 17 A0 8F 6B 57 6E B8 36
0220 | 6C B6 06 68 72 C8 50 6E EE 08 00 96 DF D4 94 BA
0230 | 4F 29 DF DE E2 12 A4 DD 09 2F A9 DB 13 E8 C1 1B
0240 | 5E 03 F9 97 78 3C FA 78 2F 12 69 42 CA 57 B0 D3
0250 | 57 D8 B7 31 A6 FA 54 FC A1 74 A5 84 3C CB 5D FF
0260 | E9 0F A4 E4 24 A4 90 FD AD 9F 8B 3F F8 B1 13 CA
0270 | C0 94 70 CF D7 3E D9 54 63 5B C5 BA 49 EB AB 36
0280 | D6 83 6A 2D B0 90 BF 43 48 DF B5 15</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 30 BC 7F 62 A8 70 65
0010 | 94 02 00 00 5C 07 E8 D0 71 4B B1 C3 0B B2 D2 9E
0020 | 0D A3 4A 1E D3 72 C3 D6 6D 43 E5 FE 7F 4B 90 E8
0030 | 0C 49 C1 D2 AF FE FB CC FE 50 02 00 58 DD 2E 14
0040 | D6 31 DC 5D 37 93 23 31 7F B5 B6 6B DB 20 4D FA
0050 | D4 60 2D 49 D7 EC 42 E7 8E 68 32 95 61 AC C9 D3
0060 | 00 B3 2C 1D A8 1A AE 5E BE B4 09 17 E4 A8 84 47
0070 | 73 2A 37 E3 CA 72 6C 60 77 BE BC 3D E6 86 C5 73
0080 | 0D 4E 41 8C 36 51 BE 7B 56 0F 28 92 79 AC 02 6F
0090 | 30 11 DC 2D 91 8D C7 01 BB 03 46 2D A1 68 68 E6
00A0 | 25 57 03 5E B8 73 45 50 C2 62 7F 39 61 CE 3D B3
00B0 | AA 80 32 09 DC 89 29 52 F7 03 91 85 5C C9 25 8A
00C0 | 48 55 BA 76 80 82 75 DD F8 67 B2 44 05 EA 93 40
00D0 | 48 49 6A 95 5E B5 0A 70 5F E2 03 23 EF F6 19 D5
00E0 | 07 D4 CA 0C 8E 87 52 54 D7 B6 04 7F 6D E2 B2 D8
00F0 | 8C 4A 47 E4 63 18 A1 88 BB 1C 6E 41 C7 C2 F9 91
0100 | FC 92 60 1A 6E C4 3E 51 64 57 13 40 BC EA 2D CC
0110 | 27 81 1F 45 B4 1D 70 DB D7 5D 0D 62 51 1E D2 21
0120 | 7C F0 62 E4 5A D7 C5 B1 8F 58 C7 57 FF 78 1E 7E
0130 | 60 09 F6 DB DD 40 84 BA 98 A5 EF 8C CB D1 67 AE
0140 | F5 4D 63 B9 E8 D5 F3 B4 D7 89 6B D9 D8 7C 07 2C
0150 | 06 45 9C 0F D6 65 82 21 F7 DE 7F A8 D9 5D 2B 2F
0160 | 7A 4C 37 9F D5 8C 9D 9D 6B 03 24 A2 BA 91 F4 85
0170 | 6E DC B8 24 B9 38 67 15 EA 6B 8C CA 96 2A C1 A5
0180 | BB 8E 4F 33 17 AC AB 8C C8 93 1A B2 D5 63 77 5D
0190 | C1 C2 FD 92 BB 94 B9 7E B8 13 56 A1 2B 72 C2 CF
01A0 | 78 5D 74 DB 15 52 20 37 6F E3 4F 1D BE C7 11 6E
01B0 | 89 BB B2 1B 31 BE A1 0B E0 31 55 54 8B 3A 61 34
01C0 | C7 B0 F6 22 0D F3 39 04 52 32 14 88 18 18 E7 91
01D0 | 57 7A A8 DE 23 4C BC 79 8D C4 E0 1E FD 42 EC 6D
01E0 | E2 13 4B 80 40 03 41 80 84 50 13 23 61 D4 E8 1E
01F0 | 51 A7 F6 DD 83 F8 13 05 CA 0A 93 0C 5B 92 AB A4
0200 | BD 4F DC 68 EE 0D 03 49 7C D9 5C 29 9B 3B F0 21
0210 | F3 67 1B AE 1D EC B0 9A D0 2B A3 B3 00 40 57 3C
0220 | BA 7E 93 E5 D2 83 7C 5D 69 71 97 57 C2 07 8F 40
0230 | E2 05 66 22 D4 38 4F 8D 73 78 AA 32 B4 4F F1 D9
0240 | 69 E1 CE 87 D6 97 5D 9B 72 8F 8D DE 8D D3 2C 13
0250 | BB 6B F5 FD 89 FB 88 C2 C3 75 D6 DE 7A 92 E9 D3
0260 | D8 86 6E 58 B3 65 90 B7 09 FE 6F D0 95 95 95 BF
0270 | 7B C0 BD D0 E6 6C D8 CC 7A 93 9C AE D2 96 78 0E
0280 | 82 A6 55 CD 91 C9 5B 7B 7F A1 1C 89</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 = EA9C0F23B9F7D66C4C9358CDAAEA0EB07F1C283012543E5C9623AE148
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>019C522C17966F65</code></td>
<td><code>0130BC7F62A87065</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>F4020000</code> (756 in decimal)</td>
<td><code>94020000</code> (660 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -482,19 +482,19 @@ random_padding_bytes = EA9C0F23B9F7D66C4C9358CDAAEA0EB07F1C283012543E5C9623AE148
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>60A4661DF29F2D88C02752BDD777C0EA</code></td>
<td><code>714BB1C30BB2D29E0DA34A1ED372C3D6</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>C99B0B86CCDDD65E855C0C7DAE5F05FB</code></td>
<td><code>6D43E5FE7F4B90E80C49C1D2AFFEFBCC</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_answer</td>
<td>56, 596</td>
<td><code>FE50020039C2863F1FE5AE556977083D</code> <code>94B9889E67DC46758F36A1A267C63709</code> <code>193F108DCF7F2B2C60B2558D1E5789F2</code> <code>ED2144D9B7A9E39E0FDB4EA832D51A8E</code> <code>AEE5E157322A59DE712253F85C344CC8</code> <code>2B22B741BA9642D5151207C583448DCA</code> <code>DDDDA64BF6E2F7BFCC4DD664A0C045C8</code> <code>5D0786903EECC8F1A18EBB1920FEDE0B</code> <code>75DD79F30E535DA1512890570F8B1A3E</code> <code>20C4D44F849886D3A8E78E81EFB04D11</code> <code>DCBA3929B61123DDC11D656DAE2E5F3D</code> <code>7F8F18AF243530A309307563832C8CCE</code> <code>7FF01BC7D69DB14039B9E78DB8EF246B</code> <code>D41279AB2095C21A09ADE3CCE020617E</code> <code>46763AD90E9B7173232CCF17211A6FBA</code> <code>74548BB6577479B160B70DA82435CD10</code> <code>125550ACBCC5E5E3059DB41F5C6EC3DB</code> <code>F0CEC9AD6EA0E030EA6AB9F8BC4F7B1C</code> <code>C08AF69D8E5E1FC7FCE9E6DAC31E1521</code> <code>C09DAA13BD40E17E1A1B3E460259C3C0</code> <code>5C85A3CB266048691CA879C55DD2B21F</code> <code>B2919370D4A41A69ECC8C8AA8DC8BC89</code> <code>50C6BAF830A68B75BA81A83AF420B842</code> <code>FFBF2B9F781A2394189B82570E2F2B85</code> <code>4E4706801520E4CEAB369526C5405425</code> <code>270B72E817A4F32AE64A29D94AB0B2F1</code> <code>99EFCECBFE1B860D5EB0B8C8208E1561</code> <code>2DEB9ECB32812818535DEB09135F6329</code> <code>62677C627B09614B2F3048B6CE206D18</code> <code>C430E16E59FD4F04C604FAE1C027C942</code> <code>17A08F6B576EB8366CB6066872C8506E</code> <code>EE080096DFD494BA4F29DFDEE212A4DD</code> <code>092FA9DB13E8C11B5E03F997783CFA78</code> <code>2F126942CA57B0D357D8B731A6FA54FC</code> <code>A174A5843CCB5DFFE90FA4E424A490FD</code> <code>AD9F8B3FF8B113CAC09470CFD73ED954</code> <code>635BC5BA49EBAB36D6836A2DB090BF43</code><br> <code>48DFB515</code></td>
<td><code>FE50020058DD2E14D631DC5D37932331</code> <code>7FB5B66BDB204DFAD4602D49D7EC42E7</code> <code>8E68329561ACC9D300B32C1DA81AAE5E</code> <code>BEB40917E4A88447732A37E3CA726C60</code> <code>77BEBC3DE686C5730D4E418C3651BE7B</code> <code>560F289279AC026F3011DC2D918DC701</code> <code>BB03462DA16868E62557035EB8734550</code> <code>C2627F3961CE3DB3AA803209DC892952</code> <code>F70391855CC9258A4855BA76808275DD</code> <code>F867B24405EA934048496A955EB50A70</code> <code>5FE20323EFF619D507D4CA0C8E875254</code> <code>D7B6047F6DE2B2D88C4A47E46318A188</code> <code>BB1C6E41C7C2F991FC92601A6EC43E51</code> <code>64571340BCEA2DCC27811F45B41D70DB</code> <code>D75D0D62511ED2217CF062E45AD7C5B1</code> <code>8F58C757FF781E7E6009F6DBDD4084BA</code> <code>98A5EF8CCBD167AEF54D63B9E8D5F3B4</code> <code>D7896BD9D87C072C06459C0FD6658221</code> <code>F7DE7FA8D95D2B2F7A4C379FD58C9D9D</code> <code>6B0324A2BA91F4856EDCB824B9386715</code> <code>EA6B8CCA962AC1A5BB8E4F3317ACAB8C</code> <code>C8931AB2D563775DC1C2FD92BB94B97E</code> <code>B81356A12B72C2CF785D74DB15522037</code> <code>6FE34F1DBEC7116E89BBB21B31BEA10B</code> <code>E03155548B3A6134C7B0F6220DF33904</code> <code>523214881818E791577AA8DE234CBC79</code> <code>8DC4E01EFD42EC6DE2134B8040034180</code> <code>8450132361D4E81E51A7F6DD83F81305</code> <code>CA0A930C5B92ABA4BD4FDC68EE0D0349</code> <code>7CD95C299B3BF021F3671BAE1DECB09A</code> <code>D02BA3B30040573CBA7E93E5D2837C5D</code> <code>69719757C2078F40E2056622D4384F8D</code> <code>7378AA32B44FF1D969E1CE87D6975D9B</code> <code>728F8DDE8DD32C13BB6BF5FD89FB88C2</code> <code>C375D6DE7A92E9D3D8866E58B36590B7</code> <code>09FE6FD0959595BF7BC0BDD0E66CD8CC</code> <code>7A939CAED296780E82A655CD91C95B7B</code><br> <code>7FA11C89</code></td>
<td>See below</td>
</tr>
</tbody>
@ -502,20 +502,20 @@ random_padding_bytes = EA9C0F23B9F7D66C4C9358CDAAEA0EB07F1C283012543E5C9623AE148
<!-- 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 = 39C2863F1FE5AE556977083D94B9889E67DC46758F36A1A267C63709193F108DCF7F2B2C60B2558D1E5789F2ED2144D9B7A9E39E0FDB4EA832D51A8EAEE5E157322A59DE712253F85C344CC82B22B741BA9642D5151207C583448DCADDDDA64BF6E2F7BFCC4DD664A0C045C85D0786903EECC8F1A18EBB1920FEDE0B75DD79F30E535DA1512890570F8B1A3E20C4D44F849886D3A8E78E81EFB04D11DCBA3929B61123DDC11D656DAE2E5F3D7F8F18AF243530A309307563832C8CCE7FF01BC7D69DB14039B9E78DB8EF246BD41279AB2095C21A09ADE3CCE020617E46763AD90E9B7173232CCF17211A6FBA74548BB6577479B160B70DA82435CD10125550ACBCC5E5E3059DB41F5C6EC3DBF0CEC9AD6EA0E030EA6AB9F8BC4F7B1CC08AF69D8E5E1FC7FCE9E6DAC31E1521C09DAA13BD40E17E1A1B3E460259C3C05C85A3CB266048691CA879C55DD2B21FB2919370D4A41A69ECC8C8AA8DC8BC8950C6BAF830A68B75BA81A83AF420B842FFBF2B9F781A2394189B82570E2F2B854E4706801520E4CEAB369526C5405425270B72E817A4F32AE64A29D94AB0B2F199EFCECBFE1B860D5EB0B8C8208E15612DEB9ECB32812818535DEB09135F632962677C627B09614B2F3048B6CE206D18C430E16E59FD4F04C604FAE1C027C94217A08F6B576EB8366CB6066872C8506EEE080096DFD494BA4F29DFDEE212A4DD092FA9DB13E8C11B5E03F997783CFA782F126942CA57B0D357D8B731A6FA54FCA174A5843CCB5DFFE90FA4E424A490FDAD9F8B3FF8B113CAC09470CFD73ED954635BC5BA49EBAB36D6836A2DB090BF4348DFB515
tmp_aes_key = 1F5005ED5D25B09D0E1B530B9A88EB7DDF60B70431DA1594FAA1309BDFBE9624
tmp_aes_iv = 13452520C02EA8FD9DC3FE8959CC7B61F0222CDBDB5518A21C2A316A3A68709D</code></pre>
<pre><code>encrypted_answer = 58DD2E14D631DC5D379323317FB5B66BDB204DFAD4602D49D7EC42E78E68329561ACC9D300B32C1DA81AAE5EBEB40917E4A88447732A37E3CA726C6077BEBC3DE686C5730D4E418C3651BE7B560F289279AC026F3011DC2D918DC701BB03462DA16868E62557035EB8734550C2627F3961CE3DB3AA803209DC892952F70391855CC9258A4855BA76808275DDF867B24405EA934048496A955EB50A705FE20323EFF619D507D4CA0C8E875254D7B6047F6DE2B2D88C4A47E46318A188BB1C6E41C7C2F991FC92601A6EC43E5164571340BCEA2DCC27811F45B41D70DBD75D0D62511ED2217CF062E45AD7C5B18F58C757FF781E7E6009F6DBDD4084BA98A5EF8CCBD167AEF54D63B9E8D5F3B4D7896BD9D87C072C06459C0FD6658221F7DE7FA8D95D2B2F7A4C379FD58C9D9D6B0324A2BA91F4856EDCB824B9386715EA6B8CCA962AC1A5BB8E4F3317ACAB8CC8931AB2D563775DC1C2FD92BB94B97EB81356A12B72C2CF785D74DB155220376FE34F1DBEC7116E89BBB21B31BEA10BE03155548B3A6134C7B0F6220DF33904523214881818E791577AA8DE234CBC798DC4E01EFD42EC6DE2134B80400341808450132361D4E81E51A7F6DD83F81305CA0A930C5B92ABA4BD4FDC68EE0D03497CD95C299B3BF021F3671BAE1DECB09AD02BA3B30040573CBA7E93E5D2837C5D69719757C2078F40E2056622D4384F8D7378AA32B44FF1D969E1CE87D6975D9B728F8DDE8DD32C13BB6BF5FD89FB88C2C375D6DE7A92E9D3D8866E58B36590B709FE6FD0959595BF7BC0BDD0E66CD8CC7A939CAED296780E82A655CD91C95B7B7FA11C89
tmp_aes_key = 3FE4B2573D39B796E3E754BAD7E5694B779B2E5CDC24E7BBC8644EA592EB3C50
tmp_aes_iv = 061B8FEC4658426330A47819BE55E3AE666E2A1D50FD3F0BC8BFF5AA72E98ABF</code></pre>
<!-- end server_DH_inner_data_input -->
<p>Yielding:</p>
<!-- start server_DH_inner_data_output -->
<pre><code>answer_with_hash = 88DCC9EFF3156A1CE32557AED9710A9A4BB46F0FBA0D89B560A4661DF29F2D88C02752BDD777C0EAC99B0B86CCDDD65E855C0C7DAE5F05FB03000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100920DCE2F05DF719D1B4D89FA4FD430EF585B2E8A489D9E7D16A07DA223928361D237EF96EFED0D7987193F5AE3E1FC703C2BF5EF4139F617215D3E673FDCB36F5A93F35E411023347FA599DC1FEE97E8B970472D0384AAA4340D713935B38F617A88CDB258F5D6DB9149FE1E0A76B65E8D391384D046109D1CCA55C45671D33C30B3DA7C3DA931E0AE81E653C337034A157A96145D977397346FE913505AD8C43119620E74F5A793B6EAE720D7E0EA4596F39A5BEE3209185BD1682B0B358D9C55D8F27F250865B005CE0DD20E43AB05E38FADB691FE85C8D10B5FAD2EA6305B887797DECA920A4410E7D43853CB34965AB250414A09CDFFDF5BE791BF6AAFF417966F65445D78FB42837187
answer = BA0D89B560A4661DF29F2D88C02752BDD777C0EAC99B0B86CCDDD65E855C0C7DAE5F05FB03000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100920DCE2F05DF719D1B4D89FA4FD430EF585B2E8A489D9E7D16A07DA223928361D237EF96EFED0D7987193F5AE3E1FC703C2BF5EF4139F617215D3E673FDCB36F5A93F35E411023347FA599DC1FEE97E8B970472D0384AAA4340D713935B38F617A88CDB258F5D6DB9149FE1E0A76B65E8D391384D046109D1CCA55C45671D33C30B3DA7C3DA931E0AE81E653C337034A157A96145D977397346FE913505AD8C43119620E74F5A793B6EAE720D7E0EA4596F39A5BEE3209185BD1682B0B358D9C55D8F27F250865B005CE0DD20E43AB05E38FADB691FE85C8D10B5FAD2EA6305B887797DECA920A4410E7D43853CB34965AB250414A09CDFFDF5BE791BF6AAFF417966F65445D78FB42837187</code></pre>
<pre><code>answer_with_hash = 07ECA4101914AB5A75FFBC8811821F95B5963665BA0D89B5714BB1C30BB2D29E0DA34A1ED372C3D66D43E5FE7F4B90E80C49C1D2AFFEFBCC03000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE0001005603B6C3F0532C6D21D97B0DA21166CB7A6AB0D1AAABC8D38F2F9CB21072DEB29F6509473A8BE01587314115D07D16C8A613E4371F89A529C4F78EBE4CF6CC2887AE3BC0A024938C8647991C15CADEE89D18827770FBF8393752A77482BC5A724CA12A1186FCA7537217CC5CE5EC0AA779142B688E6A5CBEA8C434F09ACCBEA8724F94CE351110369F6B26FC7420FED13F47AB02B95824C04727753CDE29B0EB5E3FAE7BDB7237766DD41A0BA6B03D9D9C1D97ECB9E53686228FE1DFB990AFCC79A0D12693A80D859E1FC38AF02D92A14D4456DD847F08E8FA8DD12AE511D894D3E441196D580030CCD1F1583FCD29227DC1FA6B1A1AC1398A54BDD37E7FB8D662A870655D0385B79FF60FAC
answer = BA0D89B5714BB1C30BB2D29E0DA34A1ED372C3D66D43E5FE7F4B90E80C49C1D2AFFEFBCC03000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE0001005603B6C3F0532C6D21D97B0DA21166CB7A6AB0D1AAABC8D38F2F9CB21072DEB29F6509473A8BE01587314115D07D16C8A613E4371F89A529C4F78EBE4CF6CC2887AE3BC0A024938C8647991C15CADEE89D18827770FBF8393752A77482BC5A724CA12A1186FCA7537217CC5CE5EC0AA779142B688E6A5CBEA8C434F09ACCBEA8724F94CE351110369F6B26FC7420FED13F47AB02B95824C04727753CDE29B0EB5E3FAE7BDB7237766DD41A0BA6B03D9D9C1D97ECB9E53686228FE1DFB990AFCC79A0D12693A80D859E1FC38AF02D92A14D4456DD847F08E8FA8DD12AE511D894D3E441196D580030CCD1F1583FCD29227DC1FA6B1A1AC1398A54BDD37E7FB8D662A870655D0385B79FF60FAC</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 60 A4 66 1D F2 9F 2D 88 C0 27 52 BD
0010 | D7 77 C0 EA C9 9B 0B 86 CC DD D6 5E 85 5C 0C 7D
0020 | AE 5F 05 FB 03 00 00 00 FE 00 01 00 C7 1C AE B9
<pre><code>0000 | BA 0D 89 B5 71 4B B1 C3 0B B2 D2 9E 0D A3 4A 1E
0010 | D3 72 C3 D6 6D 43 E5 FE 7F 4B 90 E8 0C 49 C1 D2
0020 | AF FE FB CC 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 = BA0D89B560A4661DF29F2D88C02752BDD777C0EAC99B0B86CCDDD65E855C0C7DAE5F05F
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 | 92 0D CE 2F 05 DF 71 9D 1B 4D 89 FA 4F D4 30 EF
0140 | 58 5B 2E 8A 48 9D 9E 7D 16 A0 7D A2 23 92 83 61
0150 | D2 37 EF 96 EF ED 0D 79 87 19 3F 5A E3 E1 FC 70
0160 | 3C 2B F5 EF 41 39 F6 17 21 5D 3E 67 3F DC B3 6F
0170 | 5A 93 F3 5E 41 10 23 34 7F A5 99 DC 1F EE 97 E8
0180 | B9 70 47 2D 03 84 AA A4 34 0D 71 39 35 B3 8F 61
0190 | 7A 88 CD B2 58 F5 D6 DB 91 49 FE 1E 0A 76 B6 5E
01A0 | 8D 39 13 84 D0 46 10 9D 1C CA 55 C4 56 71 D3 3C
01B0 | 30 B3 DA 7C 3D A9 31 E0 AE 81 E6 53 C3 37 03 4A
01C0 | 15 7A 96 14 5D 97 73 97 34 6F E9 13 50 5A D8 C4
01D0 | 31 19 62 0E 74 F5 A7 93 B6 EA E7 20 D7 E0 EA 45
01E0 | 96 F3 9A 5B EE 32 09 18 5B D1 68 2B 0B 35 8D 9C
01F0 | 55 D8 F2 7F 25 08 65 B0 05 CE 0D D2 0E 43 AB 05
0200 | E3 8F AD B6 91 FE 85 C8 D1 0B 5F AD 2E A6 30 5B
0210 | 88 77 97 DE CA 92 0A 44 10 E7 D4 38 53 CB 34 96
0220 | 5A B2 50 41 4A 09 CD FF DF 5B E7 91 BF 6A AF F4
0230 | 17 96 6F 65</code></pre>
0130 | 56 03 B6 C3 F0 53 2C 6D 21 D9 7B 0D A2 11 66 CB
0140 | 7A 6A B0 D1 AA AB C8 D3 8F 2F 9C B2 10 72 DE B2
0150 | 9F 65 09 47 3A 8B E0 15 87 31 41 15 D0 7D 16 C8
0160 | A6 13 E4 37 1F 89 A5 29 C4 F7 8E BE 4C F6 CC 28
0170 | 87 AE 3B C0 A0 24 93 8C 86 47 99 1C 15 CA DE E8
0180 | 9D 18 82 77 70 FB F8 39 37 52 A7 74 82 BC 5A 72
0190 | 4C A1 2A 11 86 FC A7 53 72 17 CC 5C E5 EC 0A A7
01A0 | 79 14 2B 68 8E 6A 5C BE A8 C4 34 F0 9A CC BE A8
01B0 | 72 4F 94 CE 35 11 10 36 9F 6B 26 FC 74 20 FE D1
01C0 | 3F 47 AB 02 B9 58 24 C0 47 27 75 3C DE 29 B0 EB
01D0 | 5E 3F AE 7B DB 72 37 76 6D D4 1A 0B A6 B0 3D 9D
01E0 | 9C 1D 97 EC B9 E5 36 86 22 8F E1 DF B9 90 AF CC
01F0 | 79 A0 D1 26 93 A8 0D 85 9E 1F C3 8A F0 2D 92 A1
0200 | 4D 44 56 DD 84 7F 08 E8 FA 8D D1 2A E5 11 D8 94
0210 | D3 E4 41 19 6D 58 00 30 CC D1 F1 58 3F CD 29 22
0220 | 7D C1 FA 6B 1A 1A C1 39 8A 54 BD D3 7E 7F B8 D6
0230 | 62 A8 70 65</code></pre>
<p>Payload (de)serialization:</p>
<pre><code>server_DH_inner_data#b5890dba nonce:int128 server_nonce:int128 g:int dh_prime:string g_a:string server_time:int = Server_DH_inner_data;</code></pre>
<table class="table">
@ -570,13 +570,13 @@ answer = BA0D89B560A4661DF29F2D88C02752BDD777C0EAC99B0B86CCDDD65E855C0C7DAE5F05F
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>60A4661DF29F2D88C02752BDD777C0EA</code></td>
<td><code>714BB1C30BB2D29E0DA34A1ED372C3D6</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>C99B0B86CCDDD65E855C0C7DAE5F05FB</code></td>
<td><code>6D43E5FE7F4B90E80C49C1D2AFFEFBCC</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
@ -594,13 +594,13 @@ answer = BA0D89B560A4661DF29F2D88C02752BDD777C0EAC99B0B86CCDDD65E855C0C7DAE5F05F
<tr>
<td>g_a</td>
<td>300, 260</td>
<td><code>FE000100920DCE2F05DF719D1B4D89FA</code> <code>4FD430EF585B2E8A489D9E7D16A07DA2</code> <code>23928361D237EF96EFED0D7987193F5A</code> <code>E3E1FC703C2BF5EF4139F617215D3E67</code> <code>3FDCB36F5A93F35E411023347FA599DC</code> <code>1FEE97E8B970472D0384AAA4340D7139</code> <code>35B38F617A88CDB258F5D6DB9149FE1E</code> <code>0A76B65E8D391384D046109D1CCA55C4</code> <code>5671D33C30B3DA7C3DA931E0AE81E653</code> <code>C337034A157A96145D977397346FE913</code> <code>505AD8C43119620E74F5A793B6EAE720</code> <code>D7E0EA4596F39A5BEE3209185BD1682B</code> <code>0B358D9C55D8F27F250865B005CE0DD2</code> <code>0E43AB05E38FADB691FE85C8D10B5FAD</code> <code>2EA6305B887797DECA920A4410E7D438</code> <code>53CB34965AB250414A09CDFFDF5BE791</code><br> <code>BF6AAFF4</code></td>
<td><code>FE0001005603B6C3F0532C6D21D97B0D</code> <code>A21166CB7A6AB0D1AAABC8D38F2F9CB2</code> <code>1072DEB29F6509473A8BE01587314115</code> <code>D07D16C8A613E4371F89A529C4F78EBE</code> <code>4CF6CC2887AE3BC0A024938C8647991C</code> <code>15CADEE89D18827770FBF8393752A774</code> <code>82BC5A724CA12A1186FCA7537217CC5C</code> <code>E5EC0AA779142B688E6A5CBEA8C434F0</code> <code>9ACCBEA8724F94CE351110369F6B26FC</code> <code>7420FED13F47AB02B95824C04727753C</code> <code>DE29B0EB5E3FAE7BDB7237766DD41A0B</code> <code>A6B03D9D9C1D97ECB9E53686228FE1DF</code> <code>B990AFCC79A0D12693A80D859E1FC38A</code> <code>F02D92A14D4456DD847F08E8FA8DD12A</code> <code>E511D894D3E441196D580030CCD1F158</code> <code>3FCD29227DC1FA6B1A1AC1398A54BDD3</code><br> <code>7E7FB8D6</code></td>
<td><code>g_a</code> diffie-hellman parameter</td>
</tr>
<tr>
<td>server_time</td>
<td>560, 4</td>
<td><code>17966F65</code> (1701811735 in decimal)</td>
<td><code>62A87065</code> (1701881954 in decimal)</td>
<td>Server time</td>
</tr>
</tbody>
@ -609,34 +609,34 @@ answer = BA0D89B560A4661DF29F2D88C02752BDD777C0EAC99B0B86CCDDD65E855C0C7DAE5F05F
<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 = 8F8D470511408FAECB9F4EB44616FC4EF2EC1608CBDF757EE02833FFD414E55409BA4EE8CAA76863D7D8355F32D0F171C23ADD933D9F179C30EBE8A8741B9F79F2C2D14AFFF9A49D0923D43C2A7EC080F8386DAA9D6912FE9411AE547B620D56C1195BAA0D96CD5B075A2DEA1180D1B5B920D08FD6A5251E4C637E21008AF8DA425E54BEA446C1CF8CC50BD132FF7BD0D5A3BD90395C3521FA8482A21F5177A483CE403D7C3B969B4DB042DC5CF0D86F5DAA5B4F513F1C601025C6B2AB3EC6F82A05B64C7A98440828392F31CC80492F2C24C2823A8E3C5E62C5A5852576C0FBB1AC1F009158B001E1796FFF2A0FB49282C2F9A7F47A5F87CEC2B8E35F6EC8B7</code></pre>
<pre><code>b = 0EEC74722391560E214D4AD0B17120AE4052148226120BAF2A12625066AA29255C2D038DFC97A3BCC4FD7F3B4A843DBA9B0199976F45625C80CDDA6EBD3F4AFFFCE2C5858CACBE69E149F99A543B3DF91D37ABDE36E89D0F52D35AE0C8F7B36086CCAFB792A67BCD2CB6901D56665545F0D7DD23BC0E07E0076BA7FAAA0F203FF78A9DE315D996A04647520D1FF3431DA8C4144EB88A75B305761B0CAA1E1E690673780CE89DA53E658D0A3EC7ED60E12BD2A9733288F875169C4C98D7644C7BC2FA3CCB2F864667B5B8E6F2E2345DD6D0C376AE591B6C70CF643698B5921B175179BDA90AB4F55CEBDBE153FC56897C468C13E7FC1DBE2C1F5ADA12AB0FB9E7</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 = C07C8885A3B2052FEF87207D621BFB19ECFC77DE64D2869E91162AD87FC0EE2CBEE339C64223C054CB39F66749DC31BBA97C94F5D0CD1CE9D8B3F1F853733F5E93FF5267818C1EB55C22CD00F9722EDE1A58D20B78C7C548CC4ADB2B4672458DBFC76FA3666290820729AD9771391BDF2FE607D9B7B9DB89B58FC3688F856E1939A21E022B76743EA6A574AD7C533443A75FC35C27632D5B872C642503B61BD21008675BC2DF80C3F469E450E75375C9701022A06C47E104EEADE717A5426FD0C0E7CE7944DC2872EF098B980484935A426CAF81B0CC698C528B4297D691E63A717C61167FF63962D14D835CAE3E73B4B201D43B8FE01F157A615BFCE612241C</code></pre>
<pre><code>g_b = 4C0AD051AA7FECFE57A4BDE64EC466ABA7708878C6913614A82ACE0A2E0B500D8AEA4032774EDFACC94A4FE955D6D55BC12E977A06B29268D97873E32CBF788905770D2F9C8E2211EE6991D23DBE32BCB1B6F337C42F8B45C5E56B9A8D0DDC70837F773F095057F6C712A938EBA2AE63490C4B3DEBA344F9D92AA535BE55B1E01FB002612A05655E040D0A4249F1098BD75DFFA83EF41A2051FEB659E084DB3460F89837E723A9A83624CC9952A534198F58D0A79789501BB55520D18280D56F0DC82A61436746D2B066A17674104AB415FF33C672A5C00A3B49BC71ED526161EE5FDE879CCFC0544130E474715F0C40226610F3F17514DB7F4C87680BD5D601</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 60 A4 66 1D F2 9F 2D 88 C0 27 52 BD
0010 | D7 77 C0 EA C9 9B 0B 86 CC DD D6 5E 85 5C 0C 7D
0020 | AE 5F 05 FB 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | C0 7C 88 85 A3 B2 05 2F EF 87 20 7D 62 1B FB 19
0040 | EC FC 77 DE 64 D2 86 9E 91 16 2A D8 7F C0 EE 2C
0050 | BE E3 39 C6 42 23 C0 54 CB 39 F6 67 49 DC 31 BB
0060 | A9 7C 94 F5 D0 CD 1C E9 D8 B3 F1 F8 53 73 3F 5E
0070 | 93 FF 52 67 81 8C 1E B5 5C 22 CD 00 F9 72 2E DE
0080 | 1A 58 D2 0B 78 C7 C5 48 CC 4A DB 2B 46 72 45 8D
0090 | BF C7 6F A3 66 62 90 82 07 29 AD 97 71 39 1B DF
00A0 | 2F E6 07 D9 B7 B9 DB 89 B5 8F C3 68 8F 85 6E 19
00B0 | 39 A2 1E 02 2B 76 74 3E A6 A5 74 AD 7C 53 34 43
00C0 | A7 5F C3 5C 27 63 2D 5B 87 2C 64 25 03 B6 1B D2
00D0 | 10 08 67 5B C2 DF 80 C3 F4 69 E4 50 E7 53 75 C9
00E0 | 70 10 22 A0 6C 47 E1 04 EE AD E7 17 A5 42 6F D0
00F0 | C0 E7 CE 79 44 DC 28 72 EF 09 8B 98 04 84 93 5A
0100 | 42 6C AF 81 B0 CC 69 8C 52 8B 42 97 D6 91 E6 3A
0110 | 71 7C 61 16 7F F6 39 62 D1 4D 83 5C AE 3E 73 B4
0120 | B2 01 D4 3B 8F E0 1F 15 7A 61 5B FC E6 12 24 1C</code></pre>
<pre><code>0000 | 54 B6 43 66 71 4B B1 C3 0B B2 D2 9E 0D A3 4A 1E
0010 | D3 72 C3 D6 6D 43 E5 FE 7F 4B 90 E8 0C 49 C1 D2
0020 | AF FE FB CC 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | 4C 0A D0 51 AA 7F EC FE 57 A4 BD E6 4E C4 66 AB
0040 | A7 70 88 78 C6 91 36 14 A8 2A CE 0A 2E 0B 50 0D
0050 | 8A EA 40 32 77 4E DF AC C9 4A 4F E9 55 D6 D5 5B
0060 | C1 2E 97 7A 06 B2 92 68 D9 78 73 E3 2C BF 78 89
0070 | 05 77 0D 2F 9C 8E 22 11 EE 69 91 D2 3D BE 32 BC
0080 | B1 B6 F3 37 C4 2F 8B 45 C5 E5 6B 9A 8D 0D DC 70
0090 | 83 7F 77 3F 09 50 57 F6 C7 12 A9 38 EB A2 AE 63
00A0 | 49 0C 4B 3D EB A3 44 F9 D9 2A A5 35 BE 55 B1 E0
00B0 | 1F B0 02 61 2A 05 65 5E 04 0D 0A 42 49 F1 09 8B
00C0 | D7 5D FF A8 3E F4 1A 20 51 FE B6 59 E0 84 DB 34
00D0 | 60 F8 98 37 E7 23 A9 A8 36 24 CC 99 52 A5 34 19
00E0 | 8F 58 D0 A7 97 89 50 1B B5 55 20 D1 82 80 D5 6F
00F0 | 0D C8 2A 61 43 67 46 D2 B0 66 A1 76 74 10 4A B4
0100 | 15 FF 33 C6 72 A5 C0 0A 3B 49 BC 71 ED 52 61 61
0110 | EE 5F DE 87 9C CF C0 54 41 30 E4 74 71 5F 0C 40
0120 | 22 66 10 F3 F1 75 14 DB 7F 4C 87 68 0B D5 D6 01</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 = BA0D89B560A4661DF29F2D88C02752BDD777C0EAC99B0B86CCDDD65E855C0C7DAE5F05F
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>60A4661DF29F2D88C02752BDD777C0EA</code></td>
<td><code>714BB1C30BB2D29E0DA34A1ED372C3D6</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>C99B0B86CCDDD65E855C0C7DAE5F05FB</code></td>
<td><code>6D43E5FE7F4B90E80C49C1D2AFFEFBCC</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>g_b</td>
<td>36, 260</td>
<td><code>FE000100C07C8885A3B2052FEF87207D</code> <code>621BFB19ECFC77DE64D2869E91162AD8</code> <code>7FC0EE2CBEE339C64223C054CB39F667</code> <code>49DC31BBA97C94F5D0CD1CE9D8B3F1F8</code> <code>53733F5E93FF5267818C1EB55C22CD00</code> <code>F9722EDE1A58D20B78C7C548CC4ADB2B</code> <code>4672458DBFC76FA3666290820729AD97</code> <code>71391BDF2FE607D9B7B9DB89B58FC368</code> <code>8F856E1939A21E022B76743EA6A574AD</code> <code>7C533443A75FC35C27632D5B872C6425</code> <code>03B61BD21008675BC2DF80C3F469E450</code> <code>E75375C9701022A06C47E104EEADE717</code> <code>A5426FD0C0E7CE7944DC2872EF098B98</code> <code>0484935A426CAF81B0CC698C528B4297</code> <code>D691E63A717C61167FF63962D14D835C</code> <code>AE3E73B4B201D43B8FE01F157A615BFC</code><br> <code>E612241C</code></td>
<td><code>FE0001004C0AD051AA7FECFE57A4BDE6</code> <code>4EC466ABA7708878C6913614A82ACE0A</code> <code>2E0B500D8AEA4032774EDFACC94A4FE9</code> <code>55D6D55BC12E977A06B29268D97873E3</code> <code>2CBF788905770D2F9C8E2211EE6991D2</code> <code>3DBE32BCB1B6F337C42F8B45C5E56B9A</code> <code>8D0DDC70837F773F095057F6C712A938</code> <code>EBA2AE63490C4B3DEBA344F9D92AA535</code> <code>BE55B1E01FB002612A05655E040D0A42</code> <code>49F1098BD75DFFA83EF41A2051FEB659</code> <code>E084DB3460F89837E723A9A83624CC99</code> <code>52A534198F58D0A79789501BB55520D1</code> <code>8280D56F0DC82A61436746D2B066A176</code> <code>74104AB415FF33C672A5C00A3B49BC71</code> <code>ED526161EE5FDE879CCFC0544130E474</code> <code>715F0C40226610F3F17514DB7F4C8768</code><br> <code>0BD5D601</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 = BA0D89B560A4661DF29F2D88C02752BDD777C0EAC99B0B86CCDDD65E855C0C7DAE5F05F
<!-- 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 = 54B6436660A4661DF29F2D88C02752BDD777C0EAC99B0B86CCDDD65E855C0C7DAE5F05FB0000000000000000FE000100C07C8885A3B2052FEF87207D621BFB19ECFC77DE64D2869E91162AD87FC0EE2CBEE339C64223C054CB39F66749DC31BBA97C94F5D0CD1CE9D8B3F1F853733F5E93FF5267818C1EB55C22CD00F9722EDE1A58D20B78C7C548CC4ADB2B4672458DBFC76FA3666290820729AD9771391BDF2FE607D9B7B9DB89B58FC3688F856E1939A21E022B76743EA6A574AD7C533443A75FC35C27632D5B872C642503B61BD21008675BC2DF80C3F469E450E75375C9701022A06C47E104EEADE717A5426FD0C0E7CE7944DC2872EF098B980484935A426CAF81B0CC698C528B4297D691E63A717C61167FF63962D14D835CAE3E73B4B201D43B8FE01F157A615BFCE612241C
padding = 30BFD35285B442908738B3A8
tmp_aes_key = 1F5005ED5D25B09D0E1B530B9A88EB7DDF60B70431DA1594FAA1309BDFBE9624
tmp_aes_iv = 13452520C02EA8FD9DC3FE8959CC7B61F0222CDBDB5518A21C2A316A3A68709D</code></pre>
<pre><code>data = 54B64366714BB1C30BB2D29E0DA34A1ED372C3D66D43E5FE7F4B90E80C49C1D2AFFEFBCC0000000000000000FE0001004C0AD051AA7FECFE57A4BDE64EC466ABA7708878C6913614A82ACE0A2E0B500D8AEA4032774EDFACC94A4FE955D6D55BC12E977A06B29268D97873E32CBF788905770D2F9C8E2211EE6991D23DBE32BCB1B6F337C42F8B45C5E56B9A8D0DDC70837F773F095057F6C712A938EBA2AE63490C4B3DEBA344F9D92AA535BE55B1E01FB002612A05655E040D0A4249F1098BD75DFFA83EF41A2051FEB659E084DB3460F89837E723A9A83624CC9952A534198F58D0A79789501BB55520D18280D56F0DC82A61436746D2B066A17674104AB415FF33C672A5C00A3B49BC71ED526161EE5FDE879CCFC0544130E474715F0C40226610F3F17514DB7F4C87680BD5D601
padding = FE047166BE57A528DFAB1B65
tmp_aes_key = 3FE4B2573D39B796E3E754BAD7E5694B779B2E5CDC24E7BBC8644EA592EB3C50
tmp_aes_iv = 061B8FEC4658426330A47819BE55E3AE666E2A1D50FD3F0BC8BFF5AA72E98ABF</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 = 72295EAAA9388467487CEA2EAB3CBDB0D5CDCDC6AC0EA61C4B11EA56D7704343BCAC9D5BEC3CAA836C9E32DEFF1F1003740790FB0519E5A4D91A6B61BBC5BD244747E79795EC673A95DF8B6CD3B4E2838B38732C9AF6F9FAEA50D3C9F5FC7CEFE838E5DDC9A2BF81EE05BCEE007ED9FD4D778F7181A61166DFE40703DF27A1BF4287D3956BC4015786E61AF31325A2E18290F011AB03EF985FB3AE44AFA6D1092A72E601FA061D403605B4CDC1C687F9C86AB2DB3C235F70C18CB348FF7250146104F8CD19E0F3C54D42267803215EF89B33D4103AD1834FC8BFA56E9E4ACE2FC8463F927EFF956EB65A5FEE4CA48B48AB87E5E9C93207F5B0730BFE3E53D4B93DFD86DC35DBFFA0D40EBBEA78A5CED9DF83F44A8F7DB2E55C19462CE41F6508C869F4C5A78E5664D65DC831958586FEAA7A730FF6989A1EEB11A9ED3F582561D92DEBB33B44C30015970CE65D0B9C5B</code></pre>
<pre><code>encrypted_data = 92A899EBE18916C7454F5F53C75969234B53E67FF7AD43DF7D0AB62E32D5B68E0A62C29110C6412D06FC97B0131CA291B3901544131991E42DA9F6390EEB05F710C28E250FD83976F80764173FC6C74E5AA81A7FB55249E77425887E72EFABF8AB3CD122FE22B1333AE95A71AF43BD5BE35488E6356DB2271A659C1B3861EDD021B2111B942B04769055ADDFF57AB6A6EB8917AB4DB09C0180429AAD386F3BD5D205CA9F0E8073E61E95457669E0496135AD21906C670AA3FDF9A85699EDAD9762C773F0BE3821B004D9BA3B47369A628FD362E8FF1F08F57561A54AE2D0539216985365626F2619290CCB4A90A88055E5A13450340CFD528E7E80FA03DEFC264B494E74BB83C5F0F3501F72B4F1E1BE5D82B9B6807EF7EF6035ED7ECD6F826F42B6BF9DB14A37FF5B4B942711C1E6959B0527FEF86C708F416DC0D2D135417F0526D95B48723646158BAE0DB45C2C80</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 C8 44 08 00 17 96 6F 65
0010 | 78 01 00 00 1F 5F 04 F5 60 A4 66 1D F2 9F 2D 88
0020 | C0 27 52 BD D7 77 C0 EA C9 9B 0B 86 CC DD D6 5E
0030 | 85 5C 0C 7D AE 5F 05 FB FE 50 01 00 72 29 5E AA
0040 | A9 38 84 67 48 7C EA 2E AB 3C BD B0 D5 CD CD C6
0050 | AC 0E A6 1C 4B 11 EA 56 D7 70 43 43 BC AC 9D 5B
0060 | EC 3C AA 83 6C 9E 32 DE FF 1F 10 03 74 07 90 FB
0070 | 05 19 E5 A4 D9 1A 6B 61 BB C5 BD 24 47 47 E7 97
0080 | 95 EC 67 3A 95 DF 8B 6C D3 B4 E2 83 8B 38 73 2C
0090 | 9A F6 F9 FA EA 50 D3 C9 F5 FC 7C EF E8 38 E5 DD
00A0 | C9 A2 BF 81 EE 05 BC EE 00 7E D9 FD 4D 77 8F 71
00B0 | 81 A6 11 66 DF E4 07 03 DF 27 A1 BF 42 87 D3 95
00C0 | 6B C4 01 57 86 E6 1A F3 13 25 A2 E1 82 90 F0 11
00D0 | AB 03 EF 98 5F B3 AE 44 AF A6 D1 09 2A 72 E6 01
00E0 | FA 06 1D 40 36 05 B4 CD C1 C6 87 F9 C8 6A B2 DB
00F0 | 3C 23 5F 70 C1 8C B3 48 FF 72 50 14 61 04 F8 CD
0100 | 19 E0 F3 C5 4D 42 26 78 03 21 5E F8 9B 33 D4 10
0110 | 3A D1 83 4F C8 BF A5 6E 9E 4A CE 2F C8 46 3F 92
0120 | 7E FF 95 6E B6 5A 5F EE 4C A4 8B 48 AB 87 E5 E9
0130 | C9 32 07 F5 B0 73 0B FE 3E 53 D4 B9 3D FD 86 DC
0140 | 35 DB FF A0 D4 0E BB EA 78 A5 CE D9 DF 83 F4 4A
0150 | 8F 7D B2 E5 5C 19 46 2C E4 1F 65 08 C8 69 F4 C5
0160 | A7 8E 56 64 D6 5D C8 31 95 85 86 FE AA 7A 73 0F
0170 | F6 98 9A 1E EB 11 A9 ED 3F 58 25 61 D9 2D EB B3
0180 | 3B 44 C3 00 15 97 0C E6 5D 0B 9C 5B</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 84 C3 06 00 62 A8 70 65
0010 | 78 01 00 00 1F 5F 04 F5 71 4B B1 C3 0B B2 D2 9E
0020 | 0D A3 4A 1E D3 72 C3 D6 6D 43 E5 FE 7F 4B 90 E8
0030 | 0C 49 C1 D2 AF FE FB CC FE 50 01 00 92 A8 99 EB
0040 | E1 89 16 C7 45 4F 5F 53 C7 59 69 23 4B 53 E6 7F
0050 | F7 AD 43 DF 7D 0A B6 2E 32 D5 B6 8E 0A 62 C2 91
0060 | 10 C6 41 2D 06 FC 97 B0 13 1C A2 91 B3 90 15 44
0070 | 13 19 91 E4 2D A9 F6 39 0E EB 05 F7 10 C2 8E 25
0080 | 0F D8 39 76 F8 07 64 17 3F C6 C7 4E 5A A8 1A 7F
0090 | B5 52 49 E7 74 25 88 7E 72 EF AB F8 AB 3C D1 22
00A0 | FE 22 B1 33 3A E9 5A 71 AF 43 BD 5B E3 54 88 E6
00B0 | 35 6D B2 27 1A 65 9C 1B 38 61 ED D0 21 B2 11 1B
00C0 | 94 2B 04 76 90 55 AD DF F5 7A B6 A6 EB 89 17 AB
00D0 | 4D B0 9C 01 80 42 9A AD 38 6F 3B D5 D2 05 CA 9F
00E0 | 0E 80 73 E6 1E 95 45 76 69 E0 49 61 35 AD 21 90
00F0 | 6C 67 0A A3 FD F9 A8 56 99 ED AD 97 62 C7 73 F0
0100 | BE 38 21 B0 04 D9 BA 3B 47 36 9A 62 8F D3 62 E8
0110 | FF 1F 08 F5 75 61 A5 4A E2 D0 53 92 16 98 53 65
0120 | 62 6F 26 19 29 0C CB 4A 90 A8 80 55 E5 A1 34 50
0130 | 34 0C FD 52 8E 7E 80 FA 03 DE FC 26 4B 49 4E 74
0140 | BB 83 C5 F0 F3 50 1F 72 B4 F1 E1 BE 5D 82 B9 B6
0150 | 80 7E F7 EF 60 35 ED 7E CD 6F 82 6F 42 B6 BF 9D
0160 | B1 4A 37 FF 5B 4B 94 27 11 C1 E6 95 9B 05 27 FE
0170 | F8 6C 70 8F 41 6D C0 D2 D1 35 41 7F 05 26 D9 5B
0180 | 48 72 36 46 15 8B AE 0D B4 5C 2C 80</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>C844080017966F65</code></td>
<td><code>84C3060062A87065</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>60A4661DF29F2D88C02752BDD777C0EA</code></td>
<td><code>714BB1C30BB2D29E0DA34A1ED372C3D6</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>C99B0B86CCDDD65E855C0C7DAE5F05FB</code></td>
<td><code>6D43E5FE7F4B90E80C49C1D2AFFEFBCC</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_data</td>
<td>56, 340</td>
<td><code>FE50010072295EAAA9388467487CEA2E</code> <code>AB3CBDB0D5CDCDC6AC0EA61C4B11EA56</code> <code>D7704343BCAC9D5BEC3CAA836C9E32DE</code> <code>FF1F1003740790FB0519E5A4D91A6B61</code> <code>BBC5BD244747E79795EC673A95DF8B6C</code> <code>D3B4E2838B38732C9AF6F9FAEA50D3C9</code> <code>F5FC7CEFE838E5DDC9A2BF81EE05BCEE</code> <code>007ED9FD4D778F7181A61166DFE40703</code> <code>DF27A1BF4287D3956BC4015786E61AF3</code> <code>1325A2E18290F011AB03EF985FB3AE44</code> <code>AFA6D1092A72E601FA061D403605B4CD</code> <code>C1C687F9C86AB2DB3C235F70C18CB348</code> <code>FF7250146104F8CD19E0F3C54D422678</code> <code>03215EF89B33D4103AD1834FC8BFA56E</code> <code>9E4ACE2FC8463F927EFF956EB65A5FEE</code> <code>4CA48B48AB87E5E9C93207F5B0730BFE</code> <code>3E53D4B93DFD86DC35DBFFA0D40EBBEA</code> <code>78A5CED9DF83F44A8F7DB2E55C19462C</code> <code>E41F6508C869F4C5A78E5664D65DC831</code> <code>958586FEAA7A730FF6989A1EEB11A9ED</code> <code>3F582561D92DEBB33B44C30015970CE6</code><br> <code>5D0B9C5B</code></td>
<td><code>FE50010092A899EBE18916C7454F5F53</code> <code>C75969234B53E67FF7AD43DF7D0AB62E</code> <code>32D5B68E0A62C29110C6412D06FC97B0</code> <code>131CA291B3901544131991E42DA9F639</code> <code>0EEB05F710C28E250FD83976F8076417</code> <code>3FC6C74E5AA81A7FB55249E77425887E</code> <code>72EFABF8AB3CD122FE22B1333AE95A71</code> <code>AF43BD5BE35488E6356DB2271A659C1B</code> <code>3861EDD021B2111B942B04769055ADDF</code> <code>F57AB6A6EB8917AB4DB09C0180429AAD</code> <code>386F3BD5D205CA9F0E8073E61E954576</code> <code>69E0496135AD21906C670AA3FDF9A856</code> <code>99EDAD9762C773F0BE3821B004D9BA3B</code> <code>47369A628FD362E8FF1F08F57561A54A</code> <code>E2D0539216985365626F2619290CCB4A</code> <code>90A88055E5A13450340CFD528E7E80FA</code> <code>03DEFC264B494E74BB83C5F0F3501F72</code> <code>B4F1E1BE5D82B9B6807EF7EF6035ED7E</code> <code>CD6F826F42B6BF9DB14A37FF5B4B9427</code> <code>11C1E6959B0527FEF86C708F416DC0D2</code> <code>D135417F0526D95B48723646158BAE0D</code><br> <code>B45C2C80</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 = 7C14296D430E38751FE5D28A2D9C1B71C4FD67157B0820BEB0BBE836BEC6E310652B9359362BA773297499DEF6FF6F9CF5461818649423AC14F235C5911B9CA2C926EC6B472F13BAE9CF149C49E7D7C6B850B34E4C0F6BA19EA22CD6478933892060C8FF258ACD3413F234F95EF23C64305CF1DA7EB3CB7FCFC75AAAEF368F4D1B518E1096D5CFEBEE42E19860AAE52925947179FF109F71778D8B47166EDB5FA0AD6DB92CD2D3BA77F77A93FE87B34D81A5FEFF20E6D5C0940527A4D2BFFB1BB5B4965F14226B5BB84C2D1BE40FBCB06A66DFF1ABDF53680CC1C07D380971E92254E02371B89F701D0830D94FD5AD350554032FD25ADDF652F9715CEDECBD0E</code></pre>
<pre><code>auth_key = 550F6647E883F8FF80BE3F6A248487051C5F9AB8B106A45A26BD99EA740CBB7EEF34BA00A9206DFE74C79AFADB9990BF560E4BE79CC2FE46F7B0F1134DAE587D83C789A489A3B322D25EFF6E9EE0719742BE89E7673C7D09DDE9B0C25413D8221B75AC3BE377B1BD9463358EDA2BA9619EAFA1B7929731486276720C84A798CCA14C4979AB733D35E4D891DB4B1CFF95C2E45767AD151D7ED1E2A860B40FD2F0CD7F265AE5BE602676DA05FF5C2738ACDC778C9EF8AB885367408653E7184E7F76CBEB1E7BD518B31BD8F27A394FC2223DB692210944B373E7695EAACBF35BA1646B57153FF63C91CB5D884B6B2B22134C299161544CB78E69221EC82899AC1F</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 70 92 7A 17 96 6F 65
0010 | 60 00 00 00 34 F7 CB 3B 60 A4 66 1D F2 9F 2D 88
0020 | C0 27 52 BD D7 77 C0 EA C9 9B 0B 86 CC DD D6 5E
0030 | 85 5C 0C 7D AE 5F 05 FB 18 F4 EC D7 63 12 72 FD
0040 | 9E 17 B6 79 C5 91 AE E5</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 CC AA D9 62 A8 70 65
0010 | 68 00 00 00 34 F7 CB 3B 71 4B B1 C3 0B B2 D2 9E
0020 | 0D A3 4A 1E D3 72 C3 D6 6D 43 E5 FE 7F 4B 90 E8
0030 | 0C 49 C1 D2 AF FE FB CC BE 11 44 D4 2D 67 33 B4
0040 | 98 85 D5 77 71 7C 4D 35</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>0170927A17966F65</code></td>
<td><code>01CCAAD962A87065</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>60000000</code> (96 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>60A4661DF29F2D88C02752BDD777C0EA</code></td>
<td><code>714BB1C30BB2D29E0DA34A1ED372C3D6</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>C99B0B86CCDDD65E855C0C7DAE5F05FB</code></td>
<td><code>6D43E5FE7F4B90E80C49C1D2AFFEFBCC</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce_hash1</td>
<td>56, 16</td>
<td><code>18F4ECD7631272FD9E17B679C591AEE5</code></td>
<td><code>BE1144D42D6733B49885D577717C4D35</code></td>
<td>The 128 lower-order bits of SHA1 of the byte string derived from the <code>new_nonce</code> string by adding a single byte with the value of 1, 2, or 3, and followed by another 8 bytes with <code>auth_key_aux_hash</code>. Different values are required to prevent an intruder from changing server response dh_gen_ok into dh_gen_retry.</td>
</tr>
</tbody>

View file

@ -517,7 +517,7 @@
</tr>
<tr>
<td><a href="/method/account.finishTakeoutSession">account.finishTakeoutSession</a></td>
<td>Finish account takeout session</td>
<td>Terminate a <a href="/api/takeout">takeout session, see here » for more info</a>.</td>
</tr>
<tr>
<td><a href="/method/messages.markDialogUnread">messages.markDialogUnread</a></td>

View file

@ -97,7 +97,7 @@
</tr>
<tr>
<td><a href="/method/bots.invokeWebViewCustomMethod">bots.invokeWebViewCustomMethod</a></td>
<td>Send a custom request from a <a href="/api/bots/webapps">mini bot app</a></td>
<td>Send a custom request from a <a href="/api/bots/webapps">mini bot app</a>, triggered by a <a href="/api/web-events#web-app-invoke-custom-method">web_app_invoke_custom_method event »</a>.<br><br>The response should be sent using a <a href="/api/bots/webapps#custom-method-invoked">custom_method_invoked</a> event, <a href="/api/web-events#web-app-invoke-custom-method">see here »</a> for more info on the flow.</td>
</tr>
</tbody>
</table></div>

View file

@ -86,7 +86,7 @@
<tbody>
<tr>
<td><a href="/method/account.initTakeoutSession">account.initTakeoutSession</a></td>
<td>Initialize account takeout session</td>
<td>Initialize a <a href="/api/takeout">takeout session, see here » for more info</a>.</td>
</tr>
</tbody>
</table></div>

View file

@ -115,7 +115,7 @@
</tr>
<tr>
<td><a href="/method/channels.getLeftChannels">channels.getLeftChannels</a></td>
<td>Get a list of <a href="/api/channel">channels/supergroups</a> we left</td>
<td>Get a list of <a href="/api/channel">channels/supergroups</a> we left, requires a <a href="/api/takeout">takeout session, see here » for more info</a>.</td>
</tr>
<tr>
<td><a href="/method/channels.getGroupsForDiscussion">channels.getGroupsForDiscussion</a></td>