Update content of files

This commit is contained in:
GitHub Action 2024-08-07 13:40:46 +00:00
parent ff7fb81659
commit dacb0a5e14
3 changed files with 210 additions and 210 deletions
data/web/corefork.telegram.org

View file

@ -62,9 +62,9 @@
<li>Added more details on how to use <a href="/api/top-rating">top peer ratings »</a></li>
<li>Added more details about the <a href="/api/push-updates#possible-notifications">READ_REACTION »</a>, <a href="/api/push-updates#possible-notifications">READ_STORIES »</a>, <a href="/api/push-updates#possible-notifications">STORY_DELETED »</a> push notifications.</li>
<li>Improved the <a href="/api/updates">updates</a> documentation, specifically:<ul>
<li>Clarified that <a href="/method/updates.getChannelDifference">updates.getChannelDifference</a> does <em>not</em> have to be invoked on startup for all channels, as it will be automatically triggered (only for channels that need catching up) by a set of <a href="/constructor/updateChannelTooLong">updateChannelTooLong</a> updates that will be returned by <a href="/method/updates.getDifference">updates.getDifference</a> (that <em>does</em> need to be called on startup). </li>
<li>Clarified that <a href="/api/updates#subscribing-to-updates-of-channels-supergroups">users should short-poll updates.getChannelDifference for currently opened channels/supergroups »</a>. </li>
<li>Clarified that <a href="/method/updates.getChannelDifference">updates.getChannelDifference</a> should not be short-polled via <code>timeout</code> if the user is currently not viewing the channel/supergroup. </li>
<li>Clarified that <a href="/method/updates.getChannelDifference">updates.getChannelDifference</a> does <em>not</em> have to be invoked on startup for all channels, as it will be automatically triggered (only for channels that need catching up) by a set of <a href="/constructor/updateChannelTooLong">updateChannelTooLong</a> updates that will be returned by <a href="/method/updates.getDifference">updates.getDifference</a> (that <em>does</em> need to be called on startup).</li>
<li>Clarified that <a href="/api/updates#subscribing-to-updates-of-channels-supergroups">users should short-poll updates.getChannelDifference for currently opened channels/supergroups (including subscribed ones) »</a>.</li>
<li>Clarified that <a href="/method/updates.getChannelDifference">updates.getChannelDifference</a> should not be short-polled via <code>timeout</code> by bots, or if the user is currently not viewing the channel/supergroup.</li>
</ul>
</li>
</ul>

View file

@ -164,7 +164,7 @@ The intermediate status, represented by the <strong>pts</strong>, must be saved
<p>Note that the shortpolling mechanism described above is also used to <a href="#subscribing-to-updates-of-channels-supergroups-we-havent-joined">enable passive delivery of updates from a channel/supergroup we're not a member of</a>. </p>
<h3><a class="anchor" href="#subscribing-to-updates-of-channels-supergroups-we-havent-joined" id="subscribing-to-updates-of-channels-supergroups-we-havent-joined" name="subscribing-to-updates-of-channels-supergroups-we-havent-joined"><i class="anchor-icon"></i></a>Subscribing to updates of channels/supergroups we haven't joined</h3>
<p>Clients may ask the API to passively send them updates for <a href="/api/channel">channels/supergroups</a> they haven't joined, by simply making a <a href="/method/updates.getChannelDifference">updates.getChannelDifference</a> query. </p>
<p>If the specified channel or supergroup is public, or is private but temporarily available for a limited time thanks to a <a href="/constructor/chatInvitePeek">chatInvitePeek</a>, the API will start passively sending updates (i.e. as standalone <a href="/type/Updates">Updates</a> constructors in the socket, as is already the case for normal channels/supergroups we've already joined) to all logged-in sessions, as long as any of the sessions continues to periodically invoke <a href="/method/updates.getChannelDifference">updates.getChannelDifference</a> every <code>timeout</code> seconds (returned by the method, or every 10 seconds if the <code>timeout</code> flag is absent from the return value of the method). </p>
<p>If the specified channel or supergroup is public, or is private but temporarily available for a limited time thanks to a <a href="/constructor/chatInvitePeek">chatInvitePeek</a>, the API will start passively sending updates (i.e. as standalone <a href="/type/Updates">Updates</a> constructors in the socket, as is already the case for normal channels/supergroups we've already joined) to all logged-in sessions, as long as any of the sessions continues to periodically invoke <a href="/method/updates.getChannelDifference">updates.getChannelDifference</a> every <code>timeout</code> seconds (returned by the method, or every 10 seconds if the <code>timeout</code> flag is absent from the return value of the method, or immediately with the new parameters if the returned difference is non-<code>final</code>). </p>
<p>To stop passively receiving updates, simply stop invoking <a href="/method/updates.getChannelDifference">updates.getChannelDifference</a>, and the API will automatically stop passively sending updates after a while. </p>
<h3><a class="anchor" href="#example-implementations" id="example-implementations" name="example-implementations"><i class="anchor-icon"></i></a>Example implementations</h3>
<p>Implementations also have to take care to postpone updates received via the socket while filling gaps in the event and Update sequences, as well as avoid filling gaps in the same sequence.</p>

View file

@ -53,9 +53,9 @@
<h5><a class="anchor" href="#1-client-sends-query-to-server" id="1-client-sends-query-to-server" name="1-client-sends-query-to-server"><i class="anchor-icon"></i></a>1) Client sends query to server</h5>
<!-- start req_pq_multi -->
<p>Sent payload (excluding transport headers/trailers):</p>
<pre><code>0000 | 00 00 00 00 00 00 00 00 D8 14 0C 00 93 27 B1 66
0010 | 14 00 00 00 F1 8E 7E BE 59 4F 64 40 6F E5 94 0D
0020 | 08 C1 86 CE A3 28 CF B8</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 BC 85 0A 00 73 74 B3 66
0010 | 14 00 00 00 F1 8E 7E BE B7 33 52 C7 A5 7A D9 D6
0020 | 69 33 9B FF 67 CA A2 5D</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>D8140C009327B166</code></td>
<td><code>BC850A007374B366</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>594F64406FE5940D08C186CEA328CFB8</code></td>
<td><code>B73352C7A57AD9D669339BFF67CAA25D</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 24 58 F6 93 27 B1 66
0010 | B8 00 00 00 63 24 16 05 59 4F 64 40 6F E5 94 0D
0020 | 08 C1 86 CE A3 28 CF B8 FC C6 82 D4 9F EF C8 2A
0030 | A4 B0 8F 37 AA 9D 24 39 08 33 8D 6B F6 9D 05 E1
0040 | 27 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 74 5A AB 73 74 B3 66
0010 | 74 00 00 00 63 24 16 05 B7 33 52 C7 A5 7A D9 D6
0020 | 69 33 9B FF 67 CA A2 5D A3 3A 8C A2 66 C8 FC AB
0030 | D3 29 F1 17 B8 FD E8 74 08 1F 36 DC 1B BB 7F 36
0040 | 45 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>012458F69327B166</code></td>
<td><code>01745AAB7374B366</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>B8000000</code> (184 in decimal)</td>
<td><code>74000000</code> (116 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -150,19 +150,19 @@
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>594F64406FE5940D08C186CEA328CFB8</code></td>
<td><code>B73352C7A57AD9D669339BFF67CAA25D</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>FCC682D49FEFC82AA4B08F37AA9D2439</code></td>
<td><code>A33A8CA266C8FCABD329F117B8FDE874</code></td>
<td>Server-generated random number</td>
</tr>
<tr>
<td>pq</td>
<td>56, 12</td>
<td><code>08338D6BF69D05E127000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 3714743974591062311</td>
<td><code>081F36DC1BBB7F3645000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2249227075586045509</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 = 3714743974591062311</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>3714743974591062311 = 1870744487 * 1985703553</code></p>
<pre><code>p = 1870744487
q = 1985703553</code></pre>
<pre><code>pq = 2249227075586045509</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>2249227075586045509 = 1308253673 * 1719259133</code></p>
<pre><code>p = 1308253673
q = 1719259133</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 33 8D 6B F6 9D 05 E1 27 00 00 00
0010 | 04 6F 81 4B A7 00 00 00 04 76 5B 6E 81 00 00 00
0020 | 59 4F 64 40 6F E5 94 0D 08 C1 86 CE A3 28 CF B8
0030 | FC C6 82 D4 9F EF C8 2A A4 B0 8F 37 AA 9D 24 39
0040 | BA A2 CB 19 63 BC 73 CA 1E 0D 80 FE 20 FE CD ED
0050 | 92 79 C5 79 5B A6 59 1B F2 27 4C 4E 11 40 A4 1B
<pre><code>0000 | 95 5F F5 A9 08 1F 36 DC 1B BB 7F 36 45 00 00 00
0010 | 04 4D FA 5D E9 00 00 00 04 66 79 CF FD 00 00 00
0020 | B7 33 52 C7 A5 7A D9 D6 69 33 9B FF 67 CA A2 5D
0030 | A3 3A 8C A2 66 C8 FC AB D3 29 F1 17 B8 FD E8 74
0040 | A1 B0 46 B7 C0 7B C0 EE 61 38 83 07 36 73 2C C0
0050 | 4C 56 41 CD 1A 66 29 CC C4 92 25 0D 3A D4 B1 2E
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 = 1985703553</code></pre>
<tr>
<td>pq</td>
<td>4, 12</td>
<td><code>08338D6BF69D05E127000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 3714743974591062311</td>
<td><code>081F36DC1BBB7F3645000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2249227075586045509</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>046F814BA7000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1870744487</td>
<td><code>044DFA5DE9000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1308253673</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>04765B6E81000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1985703553</td>
<td><code>046679CFFD000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1719259133</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>594F64406FE5940D08C186CEA328CFB8</code></td>
<td><code>B73352C7A57AD9D669339BFF67CAA25D</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>48, 16</td>
<td><code>FCC682D49FEFC82AA4B08F37AA9D2439</code></td>
<td><code>A33A8CA266C8FCABD329F117B8FDE874</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce</td>
<td>64, 32</td>
<td><code>BAA2CB1963BC73CA1E0D80FE20FECDED</code> <code>9279C5795BA6591BF2274C4E1140A41B</code></td>
<td><code>A1B046B7C07BC0EE6138830736732CC0</code> <code>4C5641CD1A6629CCC492250D3AD4B12E</code></td>
<td>Client-generated random number</td>
</tr>
<tr>
@ -291,39 +291,39 @@ q = 1985703553</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 = 955FF5A908338D6BF69D05E127000000046F814BA700000004765B6E81000000594F64406FE5940D08C186CEA328CFB8FCC682D49FEFC82AA4B08F37AA9D2439BAA2CB1963BC73CA1E0D80FE20FECDED9279C5795BA6591BF2274C4E1140A41B02000000
random_padding_bytes = 54491B42804106991885E723F2BAD5C3F9F8334A7774A97E2507D388BCEB7A90887201973F86BEAB2B9FA5FD7A9D19DF6193BF76FACED0A36D9DB8562C0181FB07A3F21294B6C3C5EBC2AC1ED009B66A077DA73D40605C76962104C5</code></pre>
<pre><code>data = 955FF5A9081F36DC1BBB7F3645000000044DFA5DE9000000046679CFFD000000B73352C7A57AD9D669339BFF67CAA25DA33A8CA266C8FCABD329F117B8FDE874A1B046B7C07BC0EE6138830736732CC04C5641CD1A6629CCC492250D3AD4B12E02000000
random_padding_bytes = E101DF91AE9B58729158A5E28D0F6B3556983A9202BF4D8A90C1F77A4FFA8AA31B3AC72030245C079DF10DFE71D0451744CBD3526704F9116C2332CBA711183055033093FF40F3DD78A814A30163162E907A2D0CD94C733B5FF5FEB0</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 = C726BD8325746D0D1924C152DFD50B2A93CA041AF620CB9844055255028337F6ECFA5F26BD70F84D29BE04D0F00A05C2718495360153F7BAFF0F5C8719902DFE34E77B1A282D36D5566C80F555CAF54DBF92CD4CE0C3B458CEEE1191C895DC2D42AE876CA60315D6424BC8E99BE2AD2BF926948B559F2BAA0AFFE3BEC4A2A2C5FB614E0C6A3E84ECF023979F99E19FC86D81FF39777A89292E50963EB374A765AEB977CE34292E36E3B186AA334A746E29D81942D7B7DA6EAE328463C896087B66E377E455B75ABCE1248520BAE7D3CEBE739A72502E8C1005301024971AEB9175B8AB49B27BC9D093939EE0A7BF1BB9BC985B876F4E0D2FD13544B55755C4AF</code></pre>
<pre><code>encrypted_data = 016EA9464BFFD80E8B8788CC16F9EDEC5DD685DB020A99C6E09E82B043D11E5B420D19D9A0BE810F40216D59A85E66F9BE796118124C0FEB6F96D01C07ACA044B58C91ED10FB75C43148C4B4976166102D444056B60583FB3B2B4A3776679A527179E9CBF75A1FBAAAC4209E8111B527A06488E9844EE0E60E8153D54D694C7869DC74EF63D906231EB7274E3B51733573232FC3D60DC12E4DAC4B53C674320A12A4F61761D6CD4CCD4BB4EE86C4BAC43AFDB8C093F3737A0098795AE46B76E9277208702B32AE4F74AC745DDCF03F0C2DF0356677C8EE247C852AC7B97E1CD07E5C604DD1DB6F833BFE433BBE99385EA69668418466396C13E7405952D8204B</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 18 D2 09 00 94 27 B1 66
0010 | 40 01 00 00 BE E4 12 D7 59 4F 64 40 6F E5 94 0D
0020 | 08 C1 86 CE A3 28 CF B8 FC C6 82 D4 9F EF C8 2A
0030 | A4 B0 8F 37 AA 9D 24 39 04 6F 81 4B A7 00 00 00
0040 | 04 76 5B 6E 81 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 C7 26 BD 83 25 74 6D 0D 19 24 C1 52
0060 | DF D5 0B 2A 93 CA 04 1A F6 20 CB 98 44 05 52 55
0070 | 02 83 37 F6 EC FA 5F 26 BD 70 F8 4D 29 BE 04 D0
0080 | F0 0A 05 C2 71 84 95 36 01 53 F7 BA FF 0F 5C 87
0090 | 19 90 2D FE 34 E7 7B 1A 28 2D 36 D5 56 6C 80 F5
00A0 | 55 CA F5 4D BF 92 CD 4C E0 C3 B4 58 CE EE 11 91
00B0 | C8 95 DC 2D 42 AE 87 6C A6 03 15 D6 42 4B C8 E9
00C0 | 9B E2 AD 2B F9 26 94 8B 55 9F 2B AA 0A FF E3 BE
00D0 | C4 A2 A2 C5 FB 61 4E 0C 6A 3E 84 EC F0 23 97 9F
00E0 | 99 E1 9F C8 6D 81 FF 39 77 7A 89 29 2E 50 96 3E
00F0 | B3 74 A7 65 AE B9 77 CE 34 29 2E 36 E3 B1 86 AA
0100 | 33 4A 74 6E 29 D8 19 42 D7 B7 DA 6E AE 32 84 63
0110 | C8 96 08 7B 66 E3 77 E4 55 B7 5A BC E1 24 85 20
0120 | BA E7 D3 CE BE 73 9A 72 50 2E 8C 10 05 30 10 24
0130 | 97 1A EB 91 75 B8 AB 49 B2 7B C9 D0 93 93 9E E0
0140 | A7 BF 1B B9 BC 98 5B 87 6F 4E 0D 2F D1 35 44 B5
0150 | 57 55 C4 AF</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 8C F9 0B 00 73 74 B3 66
0010 | 40 01 00 00 BE E4 12 D7 B7 33 52 C7 A5 7A D9 D6
0020 | 69 33 9B FF 67 CA A2 5D A3 3A 8C A2 66 C8 FC AB
0030 | D3 29 F1 17 B8 FD E8 74 04 4D FA 5D E9 00 00 00
0040 | 04 66 79 CF FD 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 01 6E A9 46 4B FF D8 0E 8B 87 88 CC
0060 | 16 F9 ED EC 5D D6 85 DB 02 0A 99 C6 E0 9E 82 B0
0070 | 43 D1 1E 5B 42 0D 19 D9 A0 BE 81 0F 40 21 6D 59
0080 | A8 5E 66 F9 BE 79 61 18 12 4C 0F EB 6F 96 D0 1C
0090 | 07 AC A0 44 B5 8C 91 ED 10 FB 75 C4 31 48 C4 B4
00A0 | 97 61 66 10 2D 44 40 56 B6 05 83 FB 3B 2B 4A 37
00B0 | 76 67 9A 52 71 79 E9 CB F7 5A 1F BA AA C4 20 9E
00C0 | 81 11 B5 27 A0 64 88 E9 84 4E E0 E6 0E 81 53 D5
00D0 | 4D 69 4C 78 69 DC 74 EF 63 D9 06 23 1E B7 27 4E
00E0 | 3B 51 73 35 73 23 2F C3 D6 0D C1 2E 4D AC 4B 53
00F0 | C6 74 32 0A 12 A4 F6 17 61 D6 CD 4C CD 4B B4 EE
0100 | 86 C4 BA C4 3A FD B8 C0 93 F3 73 7A 00 98 79 5A
0110 | E4 6B 76 E9 27 72 08 70 2B 32 AE 4F 74 AC 74 5D
0120 | DC F0 3F 0C 2D F0 35 66 77 C8 EE 24 7C 85 2A C7
0130 | B9 7E 1C D0 7E 5C 60 4D D1 DB 6F 83 3B FE 43 3B
0140 | BE 99 38 5E A6 96 68 41 84 66 39 6C 13 E7 40 59
0150 | 52 D8 20 4B</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 = 54491B42804106991885E723F2BAD5C3F9F8334A7774A97E2507D388B
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>18D209009427B166</code></td>
<td><code>8CF90B007374B366</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 = 54491B42804106991885E723F2BAD5C3F9F8334A7774A97E2507D388B
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>594F64406FE5940D08C186CEA328CFB8</code></td>
<td><code>B73352C7A57AD9D669339BFF67CAA25D</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>FCC682D49FEFC82AA4B08F37AA9D2439</code></td>
<td><code>A33A8CA266C8FCABD329F117B8FDE874</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>p</td>
<td>56, 8</td>
<td><code>046F814BA7000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1870744487</td>
<td><code>044DFA5DE9000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1308253673</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>04765B6E81000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1985703553</td>
<td><code>046679CFFD000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1719259133</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 = 54491B42804106991885E723F2BAD5C3F9F8334A7774A97E2507D388B
<tr>
<td>encrypted_data</td>
<td>80, 260</td>
<td><code>FE000100C726BD8325746D0D1924C152</code> <code>DFD50B2A93CA041AF620CB9844055255</code> <code>028337F6ECFA5F26BD70F84D29BE04D0</code> <code>F00A05C2718495360153F7BAFF0F5C87</code> <code>19902DFE34E77B1A282D36D5566C80F5</code> <code>55CAF54DBF92CD4CE0C3B458CEEE1191</code> <code>C895DC2D42AE876CA60315D6424BC8E9</code> <code>9BE2AD2BF926948B559F2BAA0AFFE3BE</code> <code>C4A2A2C5FB614E0C6A3E84ECF023979F</code> <code>99E19FC86D81FF39777A89292E50963E</code> <code>B374A765AEB977CE34292E36E3B186AA</code> <code>334A746E29D81942D7B7DA6EAE328463</code> <code>C896087B66E377E455B75ABCE1248520</code> <code>BAE7D3CEBE739A72502E8C1005301024</code> <code>971AEB9175B8AB49B27BC9D093939EE0</code> <code>A7BF1BB9BC985B876F4E0D2FD13544B5</code><br> <code>5755C4AF</code></td>
<td><code>FE000100016EA9464BFFD80E8B8788CC</code> <code>16F9EDEC5DD685DB020A99C6E09E82B0</code> <code>43D11E5B420D19D9A0BE810F40216D59</code> <code>A85E66F9BE796118124C0FEB6F96D01C</code> <code>07ACA044B58C91ED10FB75C43148C4B4</code> <code>976166102D444056B60583FB3B2B4A37</code> <code>76679A527179E9CBF75A1FBAAAC4209E</code> <code>8111B527A06488E9844EE0E60E8153D5</code> <code>4D694C7869DC74EF63D906231EB7274E</code> <code>3B51733573232FC3D60DC12E4DAC4B53</code> <code>C674320A12A4F61761D6CD4CCD4BB4EE</code> <code>86C4BAC43AFDB8C093F3737A0098795A</code> <code>E46B76E9277208702B32AE4F74AC745D</code> <code>DCF03F0C2DF0356677C8EE247C852AC7</code> <code>B97E1CD07E5C604DD1DB6F833BFE433B</code> <code>BE99385EA69668418466396C13E74059</code><br> <code>52D8204B</code></td>
<td>Value generated above</td>
</tr>
</tbody>
@ -402,47 +402,47 @@ random_padding_bytes = 54491B42804106991885E723F2BAD5C3F9F8334A7774A97E2507D388B
<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 68 00 DA 94 27 B1 66
0010 | D4 02 00 00 5C 07 E8 D0 59 4F 64 40 6F E5 94 0D
0020 | 08 C1 86 CE A3 28 CF B8 FC C6 82 D4 9F EF C8 2A
0030 | A4 B0 8F 37 AA 9D 24 39 FE 50 02 00 6A 03 A3 91
0040 | 4B B5 91 EE E8 5D B6 89 35 38 6D EF 88 17 37 A0
0050 | 9F 27 A2 C9 FF D1 4B 0D D5 18 CC 90 5F 35 51 B2
0060 | 16 C6 62 13 9C 4B B2 49 C8 D8 BE 51 CB AC AD EF
0070 | 6B 3D 7F 52 00 ED C4 54 8A 6F 6C 27 32 E2 61 AC
0080 | 11 DB 43 C1 A8 F4 CD 55 AB B6 87 9A 6D 65 1A 22
0090 | FF 72 C3 F7 48 EE EB 77 0D 82 AE F6 81 9A E3 AD
00A0 | F7 E7 EF 84 4E 88 A8 04 8F 5F 29 9E 49 78 86 EE
00B0 | 13 A9 E3 23 97 9C 05 22 6C 1C 1A 0E 22 06 B5 0E
00C0 | 67 6C 4B 41 FF 8A 51 A7 81 F8 B7 19 D6 28 DA AC
00D0 | F1 2D 75 D0 C0 65 78 E9 E3 B6 15 6F EA 19 00 C7
00E0 | CA E1 5A E8 CC 7E F8 9A 15 79 91 B1 C1 5A 36 5A
00F0 | 78 3A 42 70 9D E1 FD 28 BF 2F B4 39 ED F5 B4 97
0100 | C1 99 B6 04 69 B1 82 5C 04 3B CF 04 B4 C2 AA B7
0110 | 46 B5 95 FB 48 AB 88 48 22 01 BE 25 A9 E7 B4 AC
0120 | 08 1E D9 6B 8F D4 55 38 58 25 6B 51 B0 8C 96 3B
0130 | 4E 7A 5E F0 FA 5D 79 FA 88 13 84 03 28 6C A0 CD
0140 | 5E 60 28 19 44 BC B4 75 E0 46 43 9B 2B 9B 9C 2F
0150 | 3D 66 55 CB 07 A6 DD 85 53 92 92 46 F8 5B B0 9B
0160 | D0 EA D1 B8 40 47 1A 03 96 2A 53 D2 E8 85 D2 6C
0170 | 8C 29 1E 63 C6 9D DC 32 29 62 DC 2F EF B8 66 EA
0180 | 50 1C C6 DC 55 79 83 A3 D8 93 42 80 B2 1A E8 EA
0190 | B1 9E 25 A0 5C A6 36 30 08 B3 7F 95 A7 78 4B 8A
01A0 | D4 B4 72 EA 2F F6 A8 25 4E E9 96 9C 07 F3 B6 30
01B0 | CB B9 70 86 91 61 74 1E 27 26 5A 20 88 D4 11 C0
01C0 | 06 57 0B F6 AC 3C 17 9D 95 E6 7B 0B 32 92 6E 5E
01D0 | D3 17 D6 E2 21 E9 68 CA 98 11 7E 41 0E 1A 61 94
01E0 | 59 79 DE 12 EE 28 73 9A EF 9C BC AC 72 E3 CC 5C
01F0 | F0 9A 51 F5 FD 66 F1 15 DC B6 E4 C6 69 DE 93 75
0200 | 79 9A 21 5C 88 A4 8A 67 1D 1E 31 7E 14 95 D0 59
0210 | A9 C2 44 D1 0A C3 70 E2 75 55 32 4D D7 54 20 40
0220 | 2D 24 70 A3 66 88 36 D2 41 7E FD 5E 6A E8 D3 79
0230 | E9 4D 2A 59 3D B8 3D 10 97 23 C8 7B E6 9F 17 E0
0240 | 56 4F 5E 95 26 2D 82 D0 A2 99 B5 C7 44 D0 58 53
0250 | BA E1 28 A5 FC 8E 30 53 5F 9F 01 53 D3 88 6B D6
0260 | 0A A5 68 8E D0 4F 43 DD 01 9D 07 56 F4 32 E0 CF
0270 | 47 7B CC 22 90 48 67 8B 44 05 D1 75 E7 07 1A 92
0280 | 2A 6E 65 D3 8F 4A 6A 19 52 E9 79 B5</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 9C 60 73 74 74 B3 66
0010 | B0 02 00 00 5C 07 E8 D0 B7 33 52 C7 A5 7A D9 D6
0020 | 69 33 9B FF 67 CA A2 5D A3 3A 8C A2 66 C8 FC AB
0030 | D3 29 F1 17 B8 FD E8 74 FE 50 02 00 CF 35 5B 5D
0040 | B7 CD F1 DF 0D D3 4A 72 4C 1C 77 CB B0 71 ED D8
0050 | F0 91 40 D5 4B 69 AD 97 91 F5 2D DE B2 8E A7 5D
0060 | 99 E0 CA BB 3F B3 49 8F 24 CB 12 68 E8 5B 4A E9
0070 | 6A 50 5F AF 1D 42 2E 2D D1 46 CF 44 BE AD B9 04
0080 | 13 03 6A F2 AE 72 62 1C 4B EC F2 35 77 39 79 1F
0090 | C4 E8 99 89 46 C7 95 E3 BB 91 6B 60 40 D5 39 5F
00A0 | EF 84 8B 24 6E AF D9 72 DA 79 63 A5 46 1D 7E 6B
00B0 | B1 21 E1 F2 6F 0A BC E6 02 06 24 EA 79 76 64 96
00C0 | A1 39 57 2A 94 5F 00 2E 98 C1 0F FF 3E F1 09 88
00D0 | B6 8E 9C 15 1C EC 90 07 D3 BA 03 C1 8B 33 3F 7D
00E0 | EF 63 67 B6 4B 66 E8 63 BC 61 04 02 57 20 AF 1A
00F0 | AE 57 ED 18 53 D4 DE D3 91 C5 99 A9 6A 73 1B EC
0100 | 3F 8C 51 29 7F 57 81 AA C8 2C E8 6E E8 E2 59 D4
0110 | 08 B1 62 18 29 3B 47 60 E6 09 B4 FF 48 04 8D 30
0120 | 6F 8B F8 37 58 67 76 00 01 86 BB 08 83 F4 44 83
0130 | B1 B7 81 B0 7F 9E BF 8E AB 1C C4 40 47 92 CC 17
0140 | 9D 6A 9B E2 71 2B 34 42 9F 99 62 82 01 85 A4 00
0150 | 6E 3E 65 C3 2A 35 F9 51 87 F5 EB 93 F5 A4 0A 95
0160 | 75 9D DF 38 E7 74 78 FB 65 AE 2A BB 24 EE 64 A6
0170 | 22 4B 69 CD EB E0 CF 56 15 FC FC D2 14 52 D3 07
0180 | 0E 05 52 7B 89 BD 44 D5 2F FE AC 3E BE D0 4E D6
0190 | AE 61 A3 0E 6C 1F ED F4 AA EE B1 8A AE 92 7D 93
01A0 | 8A 00 AB B0 CA 27 4D 20 6E 60 D5 79 7D A2 0C 3A
01B0 | D2 6A 63 FA C0 CC 21 7C FB 22 65 01 BF D2 D7 FF
01C0 | B6 85 9E C5 3D 82 4A A0 33 CE A9 77 B9 B1 E9 B8
01D0 | 3F 0B BB 29 0C 15 6D D9 C5 86 12 4E E9 49 8C 9A
01E0 | 3B 8B 73 CA 64 52 7E DE B3 9E 21 FE 7A 17 50 43
01F0 | A1 4F 6C 46 74 A2 77 09 B9 C5 7D A5 A2 02 A2 A9
0200 | A1 0A 99 67 2C 6A FB E1 1A BF BC 97 95 7F F2 89
0210 | FC 29 41 4A 55 B0 4F C2 37 8C 7C D9 EE C0 89 99
0220 | BD 1B DA F7 21 65 9A AD 62 AC EA F1 D3 88 1A A7
0230 | 4A 09 42 0D 04 9D 1A 61 C9 7D B6 0F 03 5F AD CD
0240 | 32 7D 1A 37 1C 8A 59 11 AE A9 6C CF 8C 4E E2 E4
0250 | C2 38 AE 45 2F F6 A0 FA 29 F5 DC EC DA AB 8D B5
0260 | A9 6D 2B BB 09 02 43 53 D2 58 39 F0 0E 76 F1 00
0270 | 59 BB EA AF 00 BF 3C 8D 21 30 94 AE 0A 3E 8D ED
0280 | 5C 30 88 32 7C C8 94 7A 90 62 9D 78</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 = 54491B42804106991885E723F2BAD5C3F9F8334A7774A97E2507D388B
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>016800DA9427B166</code></td>
<td><code>019C60737474B366</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>D4020000</code> (724 in decimal)</td>
<td><code>B0020000</code> (688 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -482,19 +482,19 @@ random_padding_bytes = 54491B42804106991885E723F2BAD5C3F9F8334A7774A97E2507D388B
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>594F64406FE5940D08C186CEA328CFB8</code></td>
<td><code>B73352C7A57AD9D669339BFF67CAA25D</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>FCC682D49FEFC82AA4B08F37AA9D2439</code></td>
<td><code>A33A8CA266C8FCABD329F117B8FDE874</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_answer</td>
<td>56, 596</td>
<td><code>FE5002006A03A3914BB591EEE85DB689</code> <code>35386DEF881737A09F27A2C9FFD14B0D</code> <code>D518CC905F3551B216C662139C4BB249</code> <code>C8D8BE51CBACADEF6B3D7F5200EDC454</code> <code>8A6F6C2732E261AC11DB43C1A8F4CD55</code> <code>ABB6879A6D651A22FF72C3F748EEEB77</code> <code>0D82AEF6819AE3ADF7E7EF844E88A804</code> <code>8F5F299E497886EE13A9E323979C0522</code> <code>6C1C1A0E2206B50E676C4B41FF8A51A7</code> <code>81F8B719D628DAACF12D75D0C06578E9</code> <code>E3B6156FEA1900C7CAE15AE8CC7EF89A</code> <code>157991B1C15A365A783A42709DE1FD28</code> <code>BF2FB439EDF5B497C199B60469B1825C</code> <code>043BCF04B4C2AAB746B595FB48AB8848</code> <code>2201BE25A9E7B4AC081ED96B8FD45538</code> <code>58256B51B08C963B4E7A5EF0FA5D79FA</code> <code>88138403286CA0CD5E60281944BCB475</code> <code>E046439B2B9B9C2F3D6655CB07A6DD85</code> <code>53929246F85BB09BD0EAD1B840471A03</code> <code>962A53D2E885D26C8C291E63C69DDC32</code> <code>2962DC2FEFB866EA501CC6DC557983A3</code> <code>D8934280B21AE8EAB19E25A05CA63630</code> <code>08B37F95A7784B8AD4B472EA2FF6A825</code> <code>4EE9969C07F3B630CBB970869161741E</code> <code>27265A2088D411C006570BF6AC3C179D</code> <code>95E67B0B32926E5ED317D6E221E968CA</code> <code>98117E410E1A61945979DE12EE28739A</code> <code>EF9CBCAC72E3CC5CF09A51F5FD66F115</code> <code>DCB6E4C669DE9375799A215C88A48A67</code> <code>1D1E317E1495D059A9C244D10AC370E2</code> <code>7555324DD75420402D2470A3668836D2</code> <code>417EFD5E6AE8D379E94D2A593DB83D10</code> <code>9723C87BE69F17E0564F5E95262D82D0</code> <code>A299B5C744D05853BAE128A5FC8E3053</code> <code>5F9F0153D3886BD60AA5688ED04F43DD</code> <code>019D0756F432E0CF477BCC229048678B</code> <code>4405D175E7071A922A6E65D38F4A6A19</code><br> <code>52E979B5</code></td>
<td><code>FE500200CF355B5DB7CDF1DF0DD34A72</code> <code>4C1C77CBB071EDD8F09140D54B69AD97</code> <code>91F52DDEB28EA75D99E0CABB3FB3498F</code> <code>24CB1268E85B4AE96A505FAF1D422E2D</code> <code>D146CF44BEADB90413036AF2AE72621C</code> <code>4BECF2357739791FC4E8998946C795E3</code> <code>BB916B6040D5395FEF848B246EAFD972</code> <code>DA7963A5461D7E6BB121E1F26F0ABCE6</code> <code>020624EA79766496A139572A945F002E</code> <code>98C10FFF3EF10988B68E9C151CEC9007</code> <code>D3BA03C18B333F7DEF6367B64B66E863</code> <code>BC6104025720AF1AAE57ED1853D4DED3</code> <code>91C599A96A731BEC3F8C51297F5781AA</code> <code>C82CE86EE8E259D408B16218293B4760</code> <code>E609B4FF48048D306F8BF83758677600</code> <code>0186BB0883F44483B1B781B07F9EBF8E</code> <code>AB1CC4404792CC179D6A9BE2712B3442</code> <code>9F9962820185A4006E3E65C32A35F951</code> <code>87F5EB93F5A40A95759DDF38E77478FB</code> <code>65AE2ABB24EE64A6224B69CDEBE0CF56</code> <code>15FCFCD21452D3070E05527B89BD44D5</code> <code>2FFEAC3EBED04ED6AE61A30E6C1FEDF4</code> <code>AAEEB18AAE927D938A00ABB0CA274D20</code> <code>6E60D5797DA20C3AD26A63FAC0CC217C</code> <code>FB226501BFD2D7FFB6859EC53D824AA0</code> <code>33CEA977B9B1E9B83F0BBB290C156DD9</code> <code>C586124EE9498C9A3B8B73CA64527EDE</code> <code>B39E21FE7A175043A14F6C4674A27709</code> <code>B9C57DA5A202A2A9A10A99672C6AFBE1</code> <code>1ABFBC97957FF289FC29414A55B04FC2</code> <code>378C7CD9EEC08999BD1BDAF721659AAD</code> <code>62ACEAF1D3881AA74A09420D049D1A61</code> <code>C97DB60F035FADCD327D1A371C8A5911</code> <code>AEA96CCF8C4EE2E4C238AE452FF6A0FA</code> <code>29F5DCECDAAB8DB5A96D2BBB09024353</code> <code>D25839F00E76F10059BBEAAF00BF3C8D</code> <code>213094AE0A3E8DED5C3088327CC8947A</code><br> <code>90629D78</code></td>
<td>See below</td>
</tr>
</tbody>
@ -502,20 +502,20 @@ random_padding_bytes = 54491B42804106991885E723F2BAD5C3F9F8334A7774A97E2507D388B
<!-- 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 = 6A03A3914BB591EEE85DB68935386DEF881737A09F27A2C9FFD14B0DD518CC905F3551B216C662139C4BB249C8D8BE51CBACADEF6B3D7F5200EDC4548A6F6C2732E261AC11DB43C1A8F4CD55ABB6879A6D651A22FF72C3F748EEEB770D82AEF6819AE3ADF7E7EF844E88A8048F5F299E497886EE13A9E323979C05226C1C1A0E2206B50E676C4B41FF8A51A781F8B719D628DAACF12D75D0C06578E9E3B6156FEA1900C7CAE15AE8CC7EF89A157991B1C15A365A783A42709DE1FD28BF2FB439EDF5B497C199B60469B1825C043BCF04B4C2AAB746B595FB48AB88482201BE25A9E7B4AC081ED96B8FD4553858256B51B08C963B4E7A5EF0FA5D79FA88138403286CA0CD5E60281944BCB475E046439B2B9B9C2F3D6655CB07A6DD8553929246F85BB09BD0EAD1B840471A03962A53D2E885D26C8C291E63C69DDC322962DC2FEFB866EA501CC6DC557983A3D8934280B21AE8EAB19E25A05CA6363008B37F95A7784B8AD4B472EA2FF6A8254EE9969C07F3B630CBB970869161741E27265A2088D411C006570BF6AC3C179D95E67B0B32926E5ED317D6E221E968CA98117E410E1A61945979DE12EE28739AEF9CBCAC72E3CC5CF09A51F5FD66F115DCB6E4C669DE9375799A215C88A48A671D1E317E1495D059A9C244D10AC370E27555324DD75420402D2470A3668836D2417EFD5E6AE8D379E94D2A593DB83D109723C87BE69F17E0564F5E95262D82D0A299B5C744D05853BAE128A5FC8E30535F9F0153D3886BD60AA5688ED04F43DD019D0756F432E0CF477BCC229048678B4405D175E7071A922A6E65D38F4A6A1952E979B5
tmp_aes_key = 8C6A747D8344EEEF66F475E0647C84D91AFADA51BD116E0C5D609543803E0546
tmp_aes_iv = BF342C37B1E3FB36406B6C51A0D5A90FEE68596273490937AC274295BAA2CB19</code></pre>
<pre><code>encrypted_answer = CF355B5DB7CDF1DF0DD34A724C1C77CBB071EDD8F09140D54B69AD9791F52DDEB28EA75D99E0CABB3FB3498F24CB1268E85B4AE96A505FAF1D422E2DD146CF44BEADB90413036AF2AE72621C4BECF2357739791FC4E8998946C795E3BB916B6040D5395FEF848B246EAFD972DA7963A5461D7E6BB121E1F26F0ABCE6020624EA79766496A139572A945F002E98C10FFF3EF10988B68E9C151CEC9007D3BA03C18B333F7DEF6367B64B66E863BC6104025720AF1AAE57ED1853D4DED391C599A96A731BEC3F8C51297F5781AAC82CE86EE8E259D408B16218293B4760E609B4FF48048D306F8BF837586776000186BB0883F44483B1B781B07F9EBF8EAB1CC4404792CC179D6A9BE2712B34429F9962820185A4006E3E65C32A35F95187F5EB93F5A40A95759DDF38E77478FB65AE2ABB24EE64A6224B69CDEBE0CF5615FCFCD21452D3070E05527B89BD44D52FFEAC3EBED04ED6AE61A30E6C1FEDF4AAEEB18AAE927D938A00ABB0CA274D206E60D5797DA20C3AD26A63FAC0CC217CFB226501BFD2D7FFB6859EC53D824AA033CEA977B9B1E9B83F0BBB290C156DD9C586124EE9498C9A3B8B73CA64527EDEB39E21FE7A175043A14F6C4674A27709B9C57DA5A202A2A9A10A99672C6AFBE11ABFBC97957FF289FC29414A55B04FC2378C7CD9EEC08999BD1BDAF721659AAD62ACEAF1D3881AA74A09420D049D1A61C97DB60F035FADCD327D1A371C8A5911AEA96CCF8C4EE2E4C238AE452FF6A0FA29F5DCECDAAB8DB5A96D2BBB09024353D25839F00E76F10059BBEAAF00BF3C8D213094AE0A3E8DED5C3088327CC8947A90629D78
tmp_aes_key = 95C19DED56EE87B886F460FE1CDD48254C94D09EBE0DBE3B8E2B72ADA56315D4
tmp_aes_iv = 85FC1734018FBD70D76EB3CE48C64F7ACEFCA80548D635B54833A341A1B046B7</code></pre>
<!-- end server_DH_inner_data_input -->
<p>Yielding:</p>
<!-- start server_DH_inner_data_output -->
<pre><code>answer_with_hash = CE468DB257720A1B6A0719B75477DFC9A497ECFABA0D89B5594F64406FE5940D08C186CEA328CFB8FCC682D49FEFC82AA4B08F37AA9D243903000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE00010075A3EC04AB6BDC40BC07D280BA1A1FC4A00D5E2DD4BF010DA9983862010CCCE200A67DB836ACE0841C862772C4416F98F36797601DE5BEB12613B09860B25C38AFFFEFA0541DE81A9DC79E93C203967F545278FBCC1B9579B4213554DDF89F6192EB07828C998CD11C3A793A8D8C586F90FD29393352704C0E665D6962E581A1977020C5D6A18D654C0ECBA11EFFD73EF391A2BF3E7DA7703BFCCA42576B6D5D5553B03295EE0D2D9657A232BBE66DE6391D4DCF077F9AB726ADAD5424685E829ED06E9A58DBF337F923C0495A6D7D144B5A0AA8854BEF2EE86ADFBF5EE0702B4F467D0237F412393BA502188DED02A9363DE35B7273B90D487C8214916DF7C09427B166E7C33D00374D7A29
answer = BA0D89B5594F64406FE5940D08C186CEA328CFB8FCC682D49FEFC82AA4B08F37AA9D243903000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE00010075A3EC04AB6BDC40BC07D280BA1A1FC4A00D5E2DD4BF010DA9983862010CCCE200A67DB836ACE0841C862772C4416F98F36797601DE5BEB12613B09860B25C38AFFFEFA0541DE81A9DC79E93C203967F545278FBCC1B9579B4213554DDF89F6192EB07828C998CD11C3A793A8D8C586F90FD29393352704C0E665D6962E581A1977020C5D6A18D654C0ECBA11EFFD73EF391A2BF3E7DA7703BFCCA42576B6D5D5553B03295EE0D2D9657A232BBE66DE6391D4DCF077F9AB726ADAD5424685E829ED06E9A58DBF337F923C0495A6D7D144B5A0AA8854BEF2EE86ADFBF5EE0702B4F467D0237F412393BA502188DED02A9363DE35B7273B90D487C8214916DF7C09427B166E7C33D00374D7A29</code></pre>
<pre><code>answer_with_hash = 6EF19EDC8E06BAB25550BEE3ED04EF1ED15CECB5BA0D89B5B73352C7A57AD9D669339BFF67CAA25DA33A8CA266C8FCABD329F117B8FDE87403000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE0001002B5E698C38AB6B114FEFF494F781198F322693AA72890B2F51C113CF582CF8B8142BB24A4304BFCD1FD34639ED1668CE98D941EC846A6E781888C48B8BF05702A72AA06998658FB763BAE2D0A5BD250D7B5147B5F090600C7C970C6B104FC9CDC50DBF99ED03DAAEFAD56B6A865D296E1929EB0F7942CC770A9E0CCB2F3A488437CB157EB939BF9930AAEC071C0554CA2A02708F97B4B1130B10BAF50D42EA9AAF3E06CAC7ABDAE5843BEE9F5FDED162E25700B5B7A9DC08283FA37274B5639CE665A67FA1DFE2C96BF3D42BCA7FF15AFF131333CABFBAC508ECBA80CFAFCABBA7B18BE9C08D34BE4E06DED284A067F60BF65BE16142A09A4EDD7ADFCD1F811C7474B3666B6DBCDE0BBD1266
answer = BA0D89B5B73352C7A57AD9D669339BFF67CAA25DA33A8CA266C8FCABD329F117B8FDE87403000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE0001002B5E698C38AB6B114FEFF494F781198F322693AA72890B2F51C113CF582CF8B8142BB24A4304BFCD1FD34639ED1668CE98D941EC846A6E781888C48B8BF05702A72AA06998658FB763BAE2D0A5BD250D7B5147B5F090600C7C970C6B104FC9CDC50DBF99ED03DAAEFAD56B6A865D296E1929EB0F7942CC770A9E0CCB2F3A488437CB157EB939BF9930AAEC071C0554CA2A02708F97B4B1130B10BAF50D42EA9AAF3E06CAC7ABDAE5843BEE9F5FDED162E25700B5B7A9DC08283FA37274B5639CE665A67FA1DFE2C96BF3D42BCA7FF15AFF131333CABFBAC508ECBA80CFAFCABBA7B18BE9C08D34BE4E06DED284A067F60BF65BE16142A09A4EDD7ADFCD1F811C7474B3666B6DBCDE0BBD1266</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 59 4F 64 40 6F E5 94 0D 08 C1 86 CE
0010 | A3 28 CF B8 FC C6 82 D4 9F EF C8 2A A4 B0 8F 37
0020 | AA 9D 24 39 03 00 00 00 FE 00 01 00 C7 1C AE B9
<pre><code>0000 | BA 0D 89 B5 B7 33 52 C7 A5 7A D9 D6 69 33 9B FF
0010 | 67 CA A2 5D A3 3A 8C A2 66 C8 FC AB D3 29 F1 17
0020 | B8 FD E8 74 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 = BA0D89B5594F64406FE5940D08C186CEA328CFB8FCC682D49FEFC82AA4B08F37AA9D243
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 | 75 A3 EC 04 AB 6B DC 40 BC 07 D2 80 BA 1A 1F C4
0140 | A0 0D 5E 2D D4 BF 01 0D A9 98 38 62 01 0C CC E2
0150 | 00 A6 7D B8 36 AC E0 84 1C 86 27 72 C4 41 6F 98
0160 | F3 67 97 60 1D E5 BE B1 26 13 B0 98 60 B2 5C 38
0170 | AF FF EF A0 54 1D E8 1A 9D C7 9E 93 C2 03 96 7F
0180 | 54 52 78 FB CC 1B 95 79 B4 21 35 54 DD F8 9F 61
0190 | 92 EB 07 82 8C 99 8C D1 1C 3A 79 3A 8D 8C 58 6F
01A0 | 90 FD 29 39 33 52 70 4C 0E 66 5D 69 62 E5 81 A1
01B0 | 97 70 20 C5 D6 A1 8D 65 4C 0E CB A1 1E FF D7 3E
01C0 | F3 91 A2 BF 3E 7D A7 70 3B FC CA 42 57 6B 6D 5D
01D0 | 55 53 B0 32 95 EE 0D 2D 96 57 A2 32 BB E6 6D E6
01E0 | 39 1D 4D CF 07 7F 9A B7 26 AD AD 54 24 68 5E 82
01F0 | 9E D0 6E 9A 58 DB F3 37 F9 23 C0 49 5A 6D 7D 14
0200 | 4B 5A 0A A8 85 4B EF 2E E8 6A DF BF 5E E0 70 2B
0210 | 4F 46 7D 02 37 F4 12 39 3B A5 02 18 8D ED 02 A9
0220 | 36 3D E3 5B 72 73 B9 0D 48 7C 82 14 91 6D F7 C0
0230 | 94 27 B1 66</code></pre>
0130 | 2B 5E 69 8C 38 AB 6B 11 4F EF F4 94 F7 81 19 8F
0140 | 32 26 93 AA 72 89 0B 2F 51 C1 13 CF 58 2C F8 B8
0150 | 14 2B B2 4A 43 04 BF CD 1F D3 46 39 ED 16 68 CE
0160 | 98 D9 41 EC 84 6A 6E 78 18 88 C4 8B 8B F0 57 02
0170 | A7 2A A0 69 98 65 8F B7 63 BA E2 D0 A5 BD 25 0D
0180 | 7B 51 47 B5 F0 90 60 0C 7C 97 0C 6B 10 4F C9 CD
0190 | C5 0D BF 99 ED 03 DA AE FA D5 6B 6A 86 5D 29 6E
01A0 | 19 29 EB 0F 79 42 CC 77 0A 9E 0C CB 2F 3A 48 84
01B0 | 37 CB 15 7E B9 39 BF 99 30 AA EC 07 1C 05 54 CA
01C0 | 2A 02 70 8F 97 B4 B1 13 0B 10 BA F5 0D 42 EA 9A
01D0 | AF 3E 06 CA C7 AB DA E5 84 3B EE 9F 5F DE D1 62
01E0 | E2 57 00 B5 B7 A9 DC 08 28 3F A3 72 74 B5 63 9C
01F0 | E6 65 A6 7F A1 DF E2 C9 6B F3 D4 2B CA 7F F1 5A
0200 | FF 13 13 33 CA BF BA C5 08 EC BA 80 CF AF CA BB
0210 | A7 B1 8B E9 C0 8D 34 BE 4E 06 DE D2 84 A0 67 F6
0220 | 0B F6 5B E1 61 42 A0 9A 4E DD 7A DF CD 1F 81 1C
0230 | 74 74 B3 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 = BA0D89B5594F64406FE5940D08C186CEA328CFB8FCC682D49FEFC82AA4B08F37AA9D243
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>594F64406FE5940D08C186CEA328CFB8</code></td>
<td><code>B73352C7A57AD9D669339BFF67CAA25D</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>FCC682D49FEFC82AA4B08F37AA9D2439</code></td>
<td><code>A33A8CA266C8FCABD329F117B8FDE874</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
@ -594,13 +594,13 @@ answer = BA0D89B5594F64406FE5940D08C186CEA328CFB8FCC682D49FEFC82AA4B08F37AA9D243
<tr>
<td>g_a</td>
<td>300, 260</td>
<td><code>FE00010075A3EC04AB6BDC40BC07D280</code> <code>BA1A1FC4A00D5E2DD4BF010DA9983862</code> <code>010CCCE200A67DB836ACE0841C862772</code> <code>C4416F98F36797601DE5BEB12613B098</code> <code>60B25C38AFFFEFA0541DE81A9DC79E93</code> <code>C203967F545278FBCC1B9579B4213554</code> <code>DDF89F6192EB07828C998CD11C3A793A</code> <code>8D8C586F90FD29393352704C0E665D69</code> <code>62E581A1977020C5D6A18D654C0ECBA1</code> <code>1EFFD73EF391A2BF3E7DA7703BFCCA42</code> <code>576B6D5D5553B03295EE0D2D9657A232</code> <code>BBE66DE6391D4DCF077F9AB726ADAD54</code> <code>24685E829ED06E9A58DBF337F923C049</code> <code>5A6D7D144B5A0AA8854BEF2EE86ADFBF</code> <code>5EE0702B4F467D0237F412393BA50218</code> <code>8DED02A9363DE35B7273B90D487C8214</code><br> <code>916DF7C0</code></td>
<td><code>FE0001002B5E698C38AB6B114FEFF494</code> <code>F781198F322693AA72890B2F51C113CF</code> <code>582CF8B8142BB24A4304BFCD1FD34639</code> <code>ED1668CE98D941EC846A6E781888C48B</code> <code>8BF05702A72AA06998658FB763BAE2D0</code> <code>A5BD250D7B5147B5F090600C7C970C6B</code> <code>104FC9CDC50DBF99ED03DAAEFAD56B6A</code> <code>865D296E1929EB0F7942CC770A9E0CCB</code> <code>2F3A488437CB157EB939BF9930AAEC07</code> <code>1C0554CA2A02708F97B4B1130B10BAF5</code> <code>0D42EA9AAF3E06CAC7ABDAE5843BEE9F</code> <code>5FDED162E25700B5B7A9DC08283FA372</code> <code>74B5639CE665A67FA1DFE2C96BF3D42B</code> <code>CA7FF15AFF131333CABFBAC508ECBA80</code> <code>CFAFCABBA7B18BE9C08D34BE4E06DED2</code> <code>84A067F60BF65BE16142A09A4EDD7ADF</code><br> <code>CD1F811C</code></td>
<td><code>g_a</code> diffie-hellman parameter</td>
</tr>
<tr>
<td>server_time</td>
<td>560, 4</td>
<td><code>9427B166</code> (1722886036 in decimal)</td>
<td><code>7474B366</code> (1723036788 in decimal)</td>
<td>Server time</td>
</tr>
</tbody>
@ -609,34 +609,34 @@ answer = BA0D89B5594F64406FE5940D08C186CEA328CFB8FCC682D49FEFC82AA4B08F37AA9D243
<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 = 5C2257535C997956854AA30924A38DAB1783515B43C350D76471349996252F939799A5F4C2106C4F502E479B29D1C772856CF765D402E80B5FD50922DB218F3D1F80DC4E679F0548E3F1B5E110E5D241174009AC1F317B5945B6A52160C207E4A1BC5791AB6B7C4980DCBE6C0CE8818EEC64CC373F053D47D6978B1AF7AF4ED5AADCD58339BF13C8E8BD01E0FA65E865E99E573EB9ECA2C647BC9FE82FAD37B7AF30BD5A0E7CD830FAA0C9317173BEE0600C141F9F267CCB0333E2F832ACDA530866E2CB3C92D209B6AA52EAEAD3F4A9BB1AA7336EB40DDEF495763C165B88C48B1CF81000566B7C5C8CEF62AEB979721D15FF0937AA23FDBA246F1A2551E131</code></pre>
<pre><code>b = 197A14BA77AF7D6D4091A451CD8D99D5D0CAC51A383733DF01F64478B5247692BB6AB43C8FD3CD668ED452E6B131FE55496551BB6C67F3C875CE6E2EB9EBD340AB24F0D64C1B916181D2CE4FEBEE35596BE7DCD7660FA360E8CF89F1F7EB8165B814CAE126B4A35A71AA4E7BA9917DDDF0C0FD3D34796DA61355A99B8CDDC62C97A5B4B6BE1EF45CC9250A4AEB84CABD89D32E10B5AAE0D59EA946B0A94E191759B8E4993F0DC4DDD11DC15985A985A5F677E14B73D39EA28128B988AB62C3117E37B0DDE3D0F165C63F413DD82B15408ADA820FBA16E1DE92368D5A9B525DA729FC8834F9B8AF671EE64E660EB160AC5CF4EDD3D1CEB6A297AC9F80EB25EE0E</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 = 141DA0AC0D32A6491542B5520675902F9F8281DFF31DB7E45FD7C218AC6FF82E718CC126DB9952B93775056383C32A1E81A410F61E763D7072F04106BD8342A8D0978A1992303C2927DB2106F76D6761302FB5D1F15B3D57E927A44114C2815FA740AF2E248505F7FF5712A16BD9DB68245A1496F40528F6C0DA376F5FF4A5071560BF504906E84555C9E7E466F8DCB1888E11F5C817D54FF4E81FAADC6673C4B9EC5373F80A91FC845011FD38ABDBF33C8FE10060120261BFD9676FEE772D4F779EE7AC1F72D27176FABEE4946F483BF7230DA67A84221D6A89834446AC75439756BD1C97A41D95EA486F751787DB52BC9049F35C981F4036178691966F0A16</code></pre>
<pre><code>g_b = 3B4237CD8D7324EAAE784E54BC7EE6914F2B4E6C43BB48B2C3A7DC2A145F76544183A594007067550061B2AED3CA473EE24293967FA9F9E8BF17F7A0AB427DD1E163B83A7BC466093390AAB30D30395C89B2399DF270D9E0989EACA1A6D78F89EE74C3C6D46B6D366F9F3BF515F0920B3628AE05E19E44F81621B7C0417EA85FF8BAB418CA979796654EAB56FA7F71A1FB9BA44F5EFAD48F91FEA29031BF8A460183DA3AC9786F89B8516BD98303FB0DA926BE642405E1C784571445EC34544828E123FEC1AF7CFAE50BF2FB510E6FABDBB7AA1FEE649C2609AB8B7099B974250B453F898388C3317271EFE57ED95A68CB7DC80C916AE7DFB1B59F87A4EE6F3F</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 59 4F 64 40 6F E5 94 0D 08 C1 86 CE
0010 | A3 28 CF B8 FC C6 82 D4 9F EF C8 2A A4 B0 8F 37
0020 | AA 9D 24 39 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | 14 1D A0 AC 0D 32 A6 49 15 42 B5 52 06 75 90 2F
0040 | 9F 82 81 DF F3 1D B7 E4 5F D7 C2 18 AC 6F F8 2E
0050 | 71 8C C1 26 DB 99 52 B9 37 75 05 63 83 C3 2A 1E
0060 | 81 A4 10 F6 1E 76 3D 70 72 F0 41 06 BD 83 42 A8
0070 | D0 97 8A 19 92 30 3C 29 27 DB 21 06 F7 6D 67 61
0080 | 30 2F B5 D1 F1 5B 3D 57 E9 27 A4 41 14 C2 81 5F
0090 | A7 40 AF 2E 24 85 05 F7 FF 57 12 A1 6B D9 DB 68
00A0 | 24 5A 14 96 F4 05 28 F6 C0 DA 37 6F 5F F4 A5 07
00B0 | 15 60 BF 50 49 06 E8 45 55 C9 E7 E4 66 F8 DC B1
00C0 | 88 8E 11 F5 C8 17 D5 4F F4 E8 1F AA DC 66 73 C4
00D0 | B9 EC 53 73 F8 0A 91 FC 84 50 11 FD 38 AB DB F3
00E0 | 3C 8F E1 00 60 12 02 61 BF D9 67 6F EE 77 2D 4F
00F0 | 77 9E E7 AC 1F 72 D2 71 76 FA BE E4 94 6F 48 3B
0100 | F7 23 0D A6 7A 84 22 1D 6A 89 83 44 46 AC 75 43
0110 | 97 56 BD 1C 97 A4 1D 95 EA 48 6F 75 17 87 DB 52
0120 | BC 90 49 F3 5C 98 1F 40 36 17 86 91 96 6F 0A 16</code></pre>
<pre><code>0000 | 54 B6 43 66 B7 33 52 C7 A5 7A D9 D6 69 33 9B FF
0010 | 67 CA A2 5D A3 3A 8C A2 66 C8 FC AB D3 29 F1 17
0020 | B8 FD E8 74 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | 3B 42 37 CD 8D 73 24 EA AE 78 4E 54 BC 7E E6 91
0040 | 4F 2B 4E 6C 43 BB 48 B2 C3 A7 DC 2A 14 5F 76 54
0050 | 41 83 A5 94 00 70 67 55 00 61 B2 AE D3 CA 47 3E
0060 | E2 42 93 96 7F A9 F9 E8 BF 17 F7 A0 AB 42 7D D1
0070 | E1 63 B8 3A 7B C4 66 09 33 90 AA B3 0D 30 39 5C
0080 | 89 B2 39 9D F2 70 D9 E0 98 9E AC A1 A6 D7 8F 89
0090 | EE 74 C3 C6 D4 6B 6D 36 6F 9F 3B F5 15 F0 92 0B
00A0 | 36 28 AE 05 E1 9E 44 F8 16 21 B7 C0 41 7E A8 5F
00B0 | F8 BA B4 18 CA 97 97 96 65 4E AB 56 FA 7F 71 A1
00C0 | FB 9B A4 4F 5E FA D4 8F 91 FE A2 90 31 BF 8A 46
00D0 | 01 83 DA 3A C9 78 6F 89 B8 51 6B D9 83 03 FB 0D
00E0 | A9 26 BE 64 24 05 E1 C7 84 57 14 45 EC 34 54 48
00F0 | 28 E1 23 FE C1 AF 7C FA E5 0B F2 FB 51 0E 6F AB
0100 | DB B7 AA 1F EE 64 9C 26 09 AB 8B 70 99 B9 74 25
0110 | 0B 45 3F 89 83 88 C3 31 72 71 EF E5 7E D9 5A 68
0120 | CB 7D C8 0C 91 6A E7 DF B1 B5 9F 87 A4 EE 6F 3F</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 = BA0D89B5594F64406FE5940D08C186CEA328CFB8FCC682D49FEFC82AA4B08F37AA9D243
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>594F64406FE5940D08C186CEA328CFB8</code></td>
<td><code>B73352C7A57AD9D669339BFF67CAA25D</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>FCC682D49FEFC82AA4B08F37AA9D2439</code></td>
<td><code>A33A8CA266C8FCABD329F117B8FDE874</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>g_b</td>
<td>36, 260</td>
<td><code>FE000100141DA0AC0D32A6491542B552</code> <code>0675902F9F8281DFF31DB7E45FD7C218</code> <code>AC6FF82E718CC126DB9952B937750563</code> <code>83C32A1E81A410F61E763D7072F04106</code> <code>BD8342A8D0978A1992303C2927DB2106</code> <code>F76D6761302FB5D1F15B3D57E927A441</code> <code>14C2815FA740AF2E248505F7FF5712A1</code> <code>6BD9DB68245A1496F40528F6C0DA376F</code> <code>5FF4A5071560BF504906E84555C9E7E4</code> <code>66F8DCB1888E11F5C817D54FF4E81FAA</code> <code>DC6673C4B9EC5373F80A91FC845011FD</code> <code>38ABDBF33C8FE10060120261BFD9676F</code> <code>EE772D4F779EE7AC1F72D27176FABEE4</code> <code>946F483BF7230DA67A84221D6A898344</code> <code>46AC75439756BD1C97A41D95EA486F75</code> <code>1787DB52BC9049F35C981F4036178691</code><br> <code>966F0A16</code></td>
<td><code>FE0001003B4237CD8D7324EAAE784E54</code> <code>BC7EE6914F2B4E6C43BB48B2C3A7DC2A</code> <code>145F76544183A594007067550061B2AE</code> <code>D3CA473EE24293967FA9F9E8BF17F7A0</code> <code>AB427DD1E163B83A7BC466093390AAB3</code> <code>0D30395C89B2399DF270D9E0989EACA1</code> <code>A6D78F89EE74C3C6D46B6D366F9F3BF5</code> <code>15F0920B3628AE05E19E44F81621B7C0</code> <code>417EA85FF8BAB418CA979796654EAB56</code> <code>FA7F71A1FB9BA44F5EFAD48F91FEA290</code> <code>31BF8A460183DA3AC9786F89B8516BD9</code> <code>8303FB0DA926BE642405E1C784571445</code> <code>EC34544828E123FEC1AF7CFAE50BF2FB</code> <code>510E6FABDBB7AA1FEE649C2609AB8B70</code> <code>99B974250B453F898388C3317271EFE5</code> <code>7ED95A68CB7DC80C916AE7DFB1B59F87</code><br> <code>A4EE6F3F</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 = BA0D89B5594F64406FE5940D08C186CEA328CFB8FCC682D49FEFC82AA4B08F37AA9D243
<!-- 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 = 54B64366594F64406FE5940D08C186CEA328CFB8FCC682D49FEFC82AA4B08F37AA9D24390000000000000000FE000100141DA0AC0D32A6491542B5520675902F9F8281DFF31DB7E45FD7C218AC6FF82E718CC126DB9952B93775056383C32A1E81A410F61E763D7072F04106BD8342A8D0978A1992303C2927DB2106F76D6761302FB5D1F15B3D57E927A44114C2815FA740AF2E248505F7FF5712A16BD9DB68245A1496F40528F6C0DA376F5FF4A5071560BF504906E84555C9E7E466F8DCB1888E11F5C817D54FF4E81FAADC6673C4B9EC5373F80A91FC845011FD38ABDBF33C8FE10060120261BFD9676FEE772D4F779EE7AC1F72D27176FABEE4946F483BF7230DA67A84221D6A89834446AC75439756BD1C97A41D95EA486F751787DB52BC9049F35C981F4036178691966F0A16
padding = 1D7193945BE758F5935F4B13
tmp_aes_key = 8C6A747D8344EEEF66F475E0647C84D91AFADA51BD116E0C5D609543803E0546
tmp_aes_iv = BF342C37B1E3FB36406B6C51A0D5A90FEE68596273490937AC274295BAA2CB19</code></pre>
<pre><code>data = 54B64366B73352C7A57AD9D669339BFF67CAA25DA33A8CA266C8FCABD329F117B8FDE8740000000000000000FE0001003B4237CD8D7324EAAE784E54BC7EE6914F2B4E6C43BB48B2C3A7DC2A145F76544183A594007067550061B2AED3CA473EE24293967FA9F9E8BF17F7A0AB427DD1E163B83A7BC466093390AAB30D30395C89B2399DF270D9E0989EACA1A6D78F89EE74C3C6D46B6D366F9F3BF515F0920B3628AE05E19E44F81621B7C0417EA85FF8BAB418CA979796654EAB56FA7F71A1FB9BA44F5EFAD48F91FEA29031BF8A460183DA3AC9786F89B8516BD98303FB0DA926BE642405E1C784571445EC34544828E123FEC1AF7CFAE50BF2FB510E6FABDBB7AA1FEE649C2609AB8B7099B974250B453F898388C3317271EFE57ED95A68CB7DC80C916AE7DFB1B59F87A4EE6F3F
padding = BB5205ED4C4B6A1E93A44B1F
tmp_aes_key = 95C19DED56EE87B886F460FE1CDD48254C94D09EBE0DBE3B8E2B72ADA56315D4
tmp_aes_iv = 85FC1734018FBD70D76EB3CE48C64F7ACEFCA80548D635B54833A341A1B046B7</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 = 604826B2E061533085D0313FC1AC1E7968ECCE47BD6A1F46DA31E530AB272C955B81D6FF9676330F37CCAEDAA2BCD52877B34A9C0029DB601FCA549544D1D84EE79D0E20A470D1F0C1AB752861CFF1AD55634D064E4E51A7AB7DD69A404D4F6E051E14E231A9D67DED6950065AAD36B472FA63207800441621A5CAC73D116AB816FD0EE33E621E4C7C233CD6AD8290EB8DC8ABCE0CA08DBC013F0F05F0464BA21E9CDE7D53DA9A98E73FE7C33C77F296A6CDBCBAB4205C183D106DD6BC2044D89D2CABA9D0227CC531A97A3C9A8CA76456B9475A2FD612B6A7EAB965F0DAA8B79D3E0EAFC96B2A6F4B54B4C80E433B28417C8C77ACE6B8D0C21A045066755C31F012260152C278F7AB9C0649CCDF14420188432651341E3A93383F4E0F25E42414CAD0187F961D892524180AA3EFC6C3FBEAF0D23AEECC754765DAA2FD9D3CA2CCD7D4CF964CD756CBC81E2D3937BF28</code></pre>
<pre><code>encrypted_data = 25C8CC63C8973491B618B9A4823E1E4ED70DF97B2897D103188171DDA02DD97A69A67C3E4A10236E39432039D3B2CEACF8F415C76DB4789BC46C8788EFC5500E9A9A447BA2B7E4197860CA70E5560F419898FD1976E378276ED931CB6EC768DDA046C419CC0FD2D7B2E3C389D33778002508108001654792061020D3EB593163731D92D5544B86D54FD10675BF126A5628EED83FE31626C9B356938BF7B6BF4F2C887ABA8C899FC723F865BF4F094AE6447BEE14BF2D4FDF26F1A557BB660C171A1F54F0F797858B0EB79F62514D409F7E82E67BC52B5413992B31E6F7163C021D026425BE12447B1678EDE014F09BCFEDA590C26F80D396F16FFD006425BCD81C93D8D397446C2B1F357E648A6D38B5F8363A9B01EA0BA6E59BE1FA5DA136031FF08904A4CD59B29CC70D7EA6E2F8BCCF10F1FCADECA93D0055DBDBD6DF9A7D163F1C8AE17C63AE87932A4DAACE93B9</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 1C D2 09 00 94 27 B1 66
0010 | 78 01 00 00 1F 5F 04 F5 59 4F 64 40 6F E5 94 0D
0020 | 08 C1 86 CE A3 28 CF B8 FC C6 82 D4 9F EF C8 2A
0030 | A4 B0 8F 37 AA 9D 24 39 FE 50 01 00 60 48 26 B2
0040 | E0 61 53 30 85 D0 31 3F C1 AC 1E 79 68 EC CE 47
0050 | BD 6A 1F 46 DA 31 E5 30 AB 27 2C 95 5B 81 D6 FF
0060 | 96 76 33 0F 37 CC AE DA A2 BC D5 28 77 B3 4A 9C
0070 | 00 29 DB 60 1F CA 54 95 44 D1 D8 4E E7 9D 0E 20
0080 | A4 70 D1 F0 C1 AB 75 28 61 CF F1 AD 55 63 4D 06
0090 | 4E 4E 51 A7 AB 7D D6 9A 40 4D 4F 6E 05 1E 14 E2
00A0 | 31 A9 D6 7D ED 69 50 06 5A AD 36 B4 72 FA 63 20
00B0 | 78 00 44 16 21 A5 CA C7 3D 11 6A B8 16 FD 0E E3
00C0 | 3E 62 1E 4C 7C 23 3C D6 AD 82 90 EB 8D C8 AB CE
00D0 | 0C A0 8D BC 01 3F 0F 05 F0 46 4B A2 1E 9C DE 7D
00E0 | 53 DA 9A 98 E7 3F E7 C3 3C 77 F2 96 A6 CD BC BA
00F0 | B4 20 5C 18 3D 10 6D D6 BC 20 44 D8 9D 2C AB A9
0100 | D0 22 7C C5 31 A9 7A 3C 9A 8C A7 64 56 B9 47 5A
0110 | 2F D6 12 B6 A7 EA B9 65 F0 DA A8 B7 9D 3E 0E AF
0120 | C9 6B 2A 6F 4B 54 B4 C8 0E 43 3B 28 41 7C 8C 77
0130 | AC E6 B8 D0 C2 1A 04 50 66 75 5C 31 F0 12 26 01
0140 | 52 C2 78 F7 AB 9C 06 49 CC DF 14 42 01 88 43 26
0150 | 51 34 1E 3A 93 38 3F 4E 0F 25 E4 24 14 CA D0 18
0160 | 7F 96 1D 89 25 24 18 0A A3 EF C6 C3 FB EA F0 D2
0170 | 3A EE CC 75 47 65 DA A2 FD 9D 3C A2 CC D7 D4 CF
0180 | 96 4C D7 56 CB C8 1E 2D 39 37 BF 28</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 CC F1 0A 00 74 74 B3 66
0010 | 78 01 00 00 1F 5F 04 F5 B7 33 52 C7 A5 7A D9 D6
0020 | 69 33 9B FF 67 CA A2 5D A3 3A 8C A2 66 C8 FC AB
0030 | D3 29 F1 17 B8 FD E8 74 FE 50 01 00 25 C8 CC 63
0040 | C8 97 34 91 B6 18 B9 A4 82 3E 1E 4E D7 0D F9 7B
0050 | 28 97 D1 03 18 81 71 DD A0 2D D9 7A 69 A6 7C 3E
0060 | 4A 10 23 6E 39 43 20 39 D3 B2 CE AC F8 F4 15 C7
0070 | 6D B4 78 9B C4 6C 87 88 EF C5 50 0E 9A 9A 44 7B
0080 | A2 B7 E4 19 78 60 CA 70 E5 56 0F 41 98 98 FD 19
0090 | 76 E3 78 27 6E D9 31 CB 6E C7 68 DD A0 46 C4 19
00A0 | CC 0F D2 D7 B2 E3 C3 89 D3 37 78 00 25 08 10 80
00B0 | 01 65 47 92 06 10 20 D3 EB 59 31 63 73 1D 92 D5
00C0 | 54 4B 86 D5 4F D1 06 75 BF 12 6A 56 28 EE D8 3F
00D0 | E3 16 26 C9 B3 56 93 8B F7 B6 BF 4F 2C 88 7A BA
00E0 | 8C 89 9F C7 23 F8 65 BF 4F 09 4A E6 44 7B EE 14
00F0 | BF 2D 4F DF 26 F1 A5 57 BB 66 0C 17 1A 1F 54 F0
0100 | F7 97 85 8B 0E B7 9F 62 51 4D 40 9F 7E 82 E6 7B
0110 | C5 2B 54 13 99 2B 31 E6 F7 16 3C 02 1D 02 64 25
0120 | BE 12 44 7B 16 78 ED E0 14 F0 9B CF ED A5 90 C2
0130 | 6F 80 D3 96 F1 6F FD 00 64 25 BC D8 1C 93 D8 D3
0140 | 97 44 6C 2B 1F 35 7E 64 8A 6D 38 B5 F8 36 3A 9B
0150 | 01 EA 0B A6 E5 9B E1 FA 5D A1 36 03 1F F0 89 04
0160 | A4 CD 59 B2 9C C7 0D 7E A6 E2 F8 BC CF 10 F1 FC
0170 | AD EC A9 3D 00 55 DB DB D6 DF 9A 7D 16 3F 1C 8A
0180 | E1 7C 63 AE 87 93 2A 4D AA CE 93 B9</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>1CD209009427B166</code></td>
<td><code>CCF10A007474B366</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>594F64406FE5940D08C186CEA328CFB8</code></td>
<td><code>B73352C7A57AD9D669339BFF67CAA25D</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>FCC682D49FEFC82AA4B08F37AA9D2439</code></td>
<td><code>A33A8CA266C8FCABD329F117B8FDE874</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_data</td>
<td>56, 340</td>
<td><code>FE500100604826B2E061533085D0313F</code> <code>C1AC1E7968ECCE47BD6A1F46DA31E530</code> <code>AB272C955B81D6FF9676330F37CCAEDA</code> <code>A2BCD52877B34A9C0029DB601FCA5495</code> <code>44D1D84EE79D0E20A470D1F0C1AB7528</code> <code>61CFF1AD55634D064E4E51A7AB7DD69A</code> <code>404D4F6E051E14E231A9D67DED695006</code> <code>5AAD36B472FA63207800441621A5CAC7</code> <code>3D116AB816FD0EE33E621E4C7C233CD6</code> <code>AD8290EB8DC8ABCE0CA08DBC013F0F05</code> <code>F0464BA21E9CDE7D53DA9A98E73FE7C3</code> <code>3C77F296A6CDBCBAB4205C183D106DD6</code> <code>BC2044D89D2CABA9D0227CC531A97A3C</code> <code>9A8CA76456B9475A2FD612B6A7EAB965</code> <code>F0DAA8B79D3E0EAFC96B2A6F4B54B4C8</code> <code>0E433B28417C8C77ACE6B8D0C21A0450</code> <code>66755C31F012260152C278F7AB9C0649</code> <code>CCDF14420188432651341E3A93383F4E</code> <code>0F25E42414CAD0187F961D892524180A</code> <code>A3EFC6C3FBEAF0D23AEECC754765DAA2</code> <code>FD9D3CA2CCD7D4CF964CD756CBC81E2D</code><br> <code>3937BF28</code></td>
<td><code>FE50010025C8CC63C8973491B618B9A4</code> <code>823E1E4ED70DF97B2897D103188171DD</code> <code>A02DD97A69A67C3E4A10236E39432039</code> <code>D3B2CEACF8F415C76DB4789BC46C8788</code> <code>EFC5500E9A9A447BA2B7E4197860CA70</code> <code>E5560F419898FD1976E378276ED931CB</code> <code>6EC768DDA046C419CC0FD2D7B2E3C389</code> <code>D33778002508108001654792061020D3</code> <code>EB593163731D92D5544B86D54FD10675</code> <code>BF126A5628EED83FE31626C9B356938B</code> <code>F7B6BF4F2C887ABA8C899FC723F865BF</code> <code>4F094AE6447BEE14BF2D4FDF26F1A557</code> <code>BB660C171A1F54F0F797858B0EB79F62</code> <code>514D409F7E82E67BC52B5413992B31E6</code> <code>F7163C021D026425BE12447B1678EDE0</code> <code>14F09BCFEDA590C26F80D396F16FFD00</code> <code>6425BCD81C93D8D397446C2B1F357E64</code> <code>8A6D38B5F8363A9B01EA0BA6E59BE1FA</code> <code>5DA136031FF08904A4CD59B29CC70D7E</code> <code>A6E2F8BCCF10F1FCADECA93D0055DBDB</code> <code>D6DF9A7D163F1C8AE17C63AE87932A4D</code><br> <code>AACE93B9</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 = B209E947C3F8DE7CFCEBE083EBA231E4B8453682890DA74604EA1A12EAA3A170CEEAEC96C085F95384F69B4BA590CE18FD6DC316CC5BDFBA4213A1DFB44B8503D5EF2E0CD125D43C8B4D59B9E0B4FD08644EB298408BD28B5E4CF08DCDF1E9DAA4B469C350C08B1E49D0596C2DEF94D4CA0869ECA15811EB4AD499F24FCC62C2C5A8F620537EB11595BC01BD9FCED41B541E9CFC6648E838DB7971FB55739AC53E2F601398A3385AFB445FE431C355D4C30BCA0C5D6CAB643E040FED4D485A9F6A52032BF3A114265F6DD85C0F8525F28FB490B9145F04301895E8BCE1F97413ECA4CCE3F65EAF64AE4FFF16AC998AD30EB57FD2C56775D9920B67D256664B38</code></pre>
<pre><code>auth_key = 878705E799FEE22506D8BC65C19DAFDD36F341EBA0AD4D5269B6647EF0BA90D49EDFECA28E08F57E37E3F735C22CCE2C13F977467D9091A19020A20051057EE4DF07902255E02CCAD7F2C10611484FEE29B5D3D0CB549223A16FC60E7298878A8B822BA8DAEF05FC1BF51DA9240D3C8BE8047AD10354085A672957D7D5FFF0065DD779504F1AFEEFD982F4E16A670CDB84ABCF26D82C7743FF10048E6E6C954C41622B5FC8D1CBB4BAC8F36AFD1DD8B79DCF3DDCF0F2016A42F4F62E55089FC27DA88AD3B240B8ED1CF729AB4D54401679EBC3775FDF4CB755522691397B397F4873CD5E334E1AE0FAD79C80B61A7847E9D4CD6B914A1821E6BC5D4175C8F918</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 9C 97 45 95 27 B1 66
0010 | 38 00 00 00 34 F7 CB 3B 59 4F 64 40 6F E5 94 0D
0020 | 08 C1 86 CE A3 28 CF B8 FC C6 82 D4 9F EF C8 2A
0030 | A4 B0 8F 37 AA 9D 24 39 14 38 8F D1 5A EA 69 F3
0040 | 29 09 74 4A 87 66 1C FC</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 30 59 03 75 74 B3 66
0010 | 90 00 00 00 34 F7 CB 3B B7 33 52 C7 A5 7A D9 D6
0020 | 69 33 9B FF 67 CA A2 5D A3 3A 8C A2 66 C8 FC AB
0030 | D3 29 F1 17 B8 FD E8 74 FE AB A0 FD 45 DC BF 35
0040 | DD BA FE 91 7C EA 05 70</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>019C97459527B166</code></td>
<td><code>013059037574B366</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>38000000</code> (56 in decimal)</td>
<td><code>90000000</code> (144 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>594F64406FE5940D08C186CEA328CFB8</code></td>
<td><code>B73352C7A57AD9D669339BFF67CAA25D</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>FCC682D49FEFC82AA4B08F37AA9D2439</code></td>
<td><code>A33A8CA266C8FCABD329F117B8FDE874</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce_hash1</td>
<td>56, 16</td>
<td><code>14388FD15AEA69F32909744A87661CFC</code></td>
<td><code>FEABA0FD45DCBF35DDBAFE917CEA0570</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>