Update content of files

This commit is contained in:
GitHub Action 2024-06-26 18:06:39 +00:00
parent 3edd4ec8e6
commit 2f1e43c9d7
3 changed files with 209 additions and 209 deletions

View file

@ -44,7 +44,7 @@
<div id="dev_page_content"><!-- scroll_nav -->
<p>Telegram <a href="/api/channel">channel and supergroup</a> administrators may launch giveaways to randomly distribute <a href="/api/premium">Telegram Premium</a> subscriptions and other gifts among their followers, in exchange for <a href="/api/boost">boosts</a>.</p>
<p>Telegram <a href="/api/channel">channel and supergroup</a> administrators with any set of <a href="/api/rights">rights</a> may launch giveaways to randomly distribute <a href="/api/premium">Telegram Premium</a> subscriptions and other gifts among their followers, in exchange for <a href="/api/boost">boosts</a>.</p>
<p>This functionality should only be enabled if the <a href="/api/config#giveaway-gifts-purchase-available">giveaway_gifts_purchase_available</a> config value is set to true. </p>
<p>Note that the flow described below can also be used to gift a Premium subscriptions to multiple friends, and is different from the <a href="/api/premium#gifting-telegram-premium">old gift flow</a>, which allowed gifting only one subscription with some extra limitations, not present in this flow. </p>
<p>Note that <a href="/api/links#premium-multigift-links">premium multigift links</a> lead to a page that uses the new gift flow described below. </p>

View file

@ -108,7 +108,7 @@ Note that if any of the conditions changes in the period between the call to <a
<a href='/method/stories.getStoriesArchive'>stories.getStoriesArchive</a>#b4352016 peer:<a href='/type/InputPeer'>InputPeer</a> offset_id:<a href='/type/int'>int</a> limit:<a href='/type/int'>int</a> = <a href='/type/stories.Stories'>stories.Stories</a>;
<a href='/method/stories.getPinnedStories'>stories.getPinnedStories</a>#5821a5dc peer:<a href='/type/InputPeer'>InputPeer</a> offset_id:<a href='/type/int'>int</a> limit:<a href='/type/int'>int</a> = <a href='/type/stories.Stories'>stories.Stories</a>;</code></pre>
<p>After an active story expires, it is automatically added to the story archive: stories in the story archive are only visible to the poster. </p>
<p>After an active story expires, it is automatically added to the story archive: stories in the story archive are only visible to the poster, or to channel/supergroup admins with <a href="/constructor/chatAdminRights"><code>edit_stories</code> admin rights</a> rights. </p>
<p>Use <a href="/method/stories.getStoriesArchive">stories.getStoriesArchive</a> to fetch stories in the story archive. </p>
<p>Archived stories may then be pinned on the profile, where they may be fetched using <a href="/method/stories.getPinnedStories">stories.getPinnedStories</a> by users who explicitly open your profile: use <a href="/method/stories.togglePinned">stories.togglePinned</a> to pin or unpin one or more stories to your profile. </p>
<p>Stories may also be autopinned upon expiration if the <code>pinned</code> flag is set <a href="#posting-stories">when posting them</a>. </p>
@ -231,7 +231,7 @@ When the stories of a user are marked as hidden, the <code>stories_hidden</code>
---functions---
<a href='/method/messages.sendMessage'>messages.sendMessage</a>#983f9745 flags:<a href='/type/%23'>#</a> no_webpage:flags.1?<a href='/constructor/true'>true</a> silent:flags.5?<a href='/constructor/true'>true</a> background:flags.6?<a href='/constructor/true'>true</a> clear_draft:flags.7?<a href='/constructor/true'>true</a> noforwards:flags.14?<a href='/constructor/true'>true</a> update_stickersets_order:flags.15?<a href='/constructor/true'>true</a> invert_media:flags.16?<a href='/constructor/true'>true</a> peer:<a href='/type/InputPeer'>InputPeer</a> reply_to:flags.0?<a href='/type/InputReplyTo'>InputReplyTo</a> message:<a href='/type/string'>string</a> random_id:<a href='/type/long'>long</a> reply_markup:flags.2?<a href='/type/ReplyMarkup'>ReplyMarkup</a> entities:flags.3?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/MessageEntity'>MessageEntity</a>&gt; schedule_date:flags.10?<a href='/type/int'>int</a> send_as:flags.13?<a href='/type/InputPeer'>InputPeer</a> quick_reply_shortcut:flags.17?<a href='/type/InputQuickReplyShortcut'>InputQuickReplyShortcut</a> effect:flags.18?<a href='/type/long'>long</a> = <a href='/type/Updates'>Updates</a>;</code></pre>
<p>You may reply to stories posted by users by using <a href="/method/messages.sendMessage">messages.sendMessage</a>, <a href="/method/messages.sendMedia">messages.sendMedia</a> or any other method used to send messages, passing an <a href="/constructor/inputReplyToStory">inputReplyToStory</a> to <code>reply_to</code>, with the ID of the user that posted the story (which must also be the destination <code>peer</code> of the message) and the story ID. </p>
<p>You may reply to stories posted by users and supergroups by using <a href="/method/messages.sendMessage">messages.sendMessage</a>, <a href="/method/messages.sendMedia">messages.sendMedia</a> or any other method used to send messages, passing an <a href="/constructor/inputReplyToStory">inputReplyToStory</a> to <code>reply_to</code>, with the ID of the user that posted the story (which must also be the destination <code>peer</code> of the message) and the story ID. </p>
<h3><a class="anchor" href="#reposting-stories" id="reposting-stories" name="reposting-stories"><i class="anchor-icon"></i></a>Reposting stories</h3>
<pre><code><a href='/constructor/storyFwdHeader'>storyFwdHeader</a>#b826e150 flags:<a href='/type/%23'>#</a> modified:flags.3?<a href='/constructor/true'>true</a> from:flags.0?<a href='/type/Peer'>Peer</a> from_name:flags.1?<a href='/type/string'>string</a> story_id:flags.2?<a href='/type/int'>int</a> = <a href='/type/StoryFwdHeader'>StoryFwdHeader</a>;

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 CC E5 02 00 E8 2E 7B 66
0010 | 14 00 00 00 F1 8E 7E BE FE 76 51 D6 28 ED 47 10
0020 | EE 66 DE C7 F2 89 F2 D3</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 00 05 0B 00 9D 54 7C 66
0010 | 14 00 00 00 F1 8E 7E BE 93 10 2C AE BB 91 9E 9C
0020 | 27 B0 00 AA 59 D8 3F D7</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>CCE50200E82E7B66</code></td>
<td><code>00050B009D547C66</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>FE7651D628ED4710EE66DEC7F289F2D3</code></td>
<td><code>93102CAEBB919E9C27B000AA59D83FD7</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 E8 11 97 E8 2E 7B 66
0010 | B4 00 00 00 63 24 16 05 FE 76 51 D6 28 ED 47 10
0020 | EE 66 DE C7 F2 89 F2 D3 A8 71 EC 90 54 40 E9 4F
0030 | 36 CA AE 3C 16 AE 24 E1 08 29 0B 62 FE 56 DA C8
0040 | B3 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 70 BE AF 9D 54 7C 66
0010 | 98 00 00 00 63 24 16 05 93 10 2C AE BB 91 9E 9C
0020 | 27 B0 00 AA 59 D8 3F D7 8D 2B 59 2A 7F 3E D1 0F
0030 | 45 D4 06 FD 35 9F D1 D0 08 22 AB 2F B7 96 54 EB
0040 | A3 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>01E81197E82E7B66</code></td>
<td><code>0170BEAF9D547C66</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>B4000000</code> (180 in decimal)</td>
<td><code>98000000</code> (152 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -150,19 +150,19 @@
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>FE7651D628ED4710EE66DEC7F289F2D3</code></td>
<td><code>93102CAEBB919E9C27B000AA59D83FD7</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>A871EC905440E94F36CAAE3C16AE24E1</code></td>
<td><code>8D2B592A7F3ED10F45D406FD359FD1D0</code></td>
<td>Server-generated random number</td>
</tr>
<tr>
<td>pq</td>
<td>56, 12</td>
<td><code>08290B62FE56DAC8B3000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2957566424817256627</td>
<td><code>0822AB2FB79654EBA3000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2498142883854740387</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 = 2957566424817256627</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>2957566424817256627 = 1650247297 * 1792195891</code></p>
<pre><code>p = 1650247297
q = 1792195891</code></pre>
<pre><code>pq = 2498142883854740387</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>2498142883854740387 = 1492963699 * 1673277713</code></p>
<pre><code>p = 1492963699
q = 1673277713</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 29 0B 62 FE 56 DA C8 B3 00 00 00
0010 | 04 62 5C C6 81 00 00 00 04 6A D2 BD 33 00 00 00
0020 | FE 76 51 D6 28 ED 47 10 EE 66 DE C7 F2 89 F2 D3
0030 | A8 71 EC 90 54 40 E9 4F 36 CA AE 3C 16 AE 24 E1
0040 | 69 56 FE C1 57 B9 00 B9 C0 FF 2E F9 33 2B D8 FD
0050 | F0 CB 19 0F BE 4F 10 49 41 F7 4C FE 6C C0 A2 D8
<pre><code>0000 | 95 5F F5 A9 08 22 AB 2F B7 96 54 EB A3 00 00 00
0010 | 04 58 FC D1 73 00 00 00 04 63 BC 31 11 00 00 00
0020 | 93 10 2C AE BB 91 9E 9C 27 B0 00 AA 59 D8 3F D7
0030 | 8D 2B 59 2A 7F 3E D1 0F 45 D4 06 FD 35 9F D1 D0
0040 | 09 5D 45 35 DC 97 DF 66 A3 08 76 19 2E 41 DD 65
0050 | 61 8E C9 0B 14 B6 1F 99 89 15 AA 75 4A 09 B3 D0
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 = 1792195891</code></pre>
<tr>
<td>pq</td>
<td>4, 12</td>
<td><code>08290B62FE56DAC8B3000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2957566424817256627</td>
<td><code>0822AB2FB79654EBA3000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2498142883854740387</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>04625CC681000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1650247297</td>
<td><code>0458FCD173000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1492963699</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>046AD2BD33000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1792195891</td>
<td><code>0463BC3111000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1673277713</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>FE7651D628ED4710EE66DEC7F289F2D3</code></td>
<td><code>93102CAEBB919E9C27B000AA59D83FD7</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>48, 16</td>
<td><code>A871EC905440E94F36CAAE3C16AE24E1</code></td>
<td><code>8D2B592A7F3ED10F45D406FD359FD1D0</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce</td>
<td>64, 32</td>
<td><code>6956FEC157B900B9C0FF2EF9332BD8FD</code> <code>F0CB190FBE4F104941F74CFE6CC0A2D8</code></td>
<td><code>095D4535DC97DF66A30876192E41DD65</code> <code>618EC90B14B61F998915AA754A09B3D0</code></td>
<td>Client-generated random number</td>
</tr>
<tr>
@ -291,39 +291,39 @@ q = 1792195891</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 = 955FF5A908290B62FE56DAC8B300000004625CC681000000046AD2BD33000000FE7651D628ED4710EE66DEC7F289F2D3A871EC905440E94F36CAAE3C16AE24E16956FEC157B900B9C0FF2EF9332BD8FDF0CB190FBE4F104941F74CFE6CC0A2D802000000
random_padding_bytes = 10E6A86C7055C990CB7E20A61032FEEC341959199DBE48C3B6EF7B24AFF34152C1D89BA48A3325D3C90D4E67420F61FAC601BE55E54B6242B17DC8FFEE182AC86EA9CFF52396B9608E175478B678AFADEFF5A2CB310798054172AD88</code></pre>
<pre><code>data = 955FF5A90822AB2FB79654EBA30000000458FCD1730000000463BC311100000093102CAEBB919E9C27B000AA59D83FD78D2B592A7F3ED10F45D406FD359FD1D0095D4535DC97DF66A30876192E41DD65618EC90B14B61F998915AA754A09B3D002000000
random_padding_bytes = 4A8A01C2440C95533FEE81181232C5B3248FE57C9766C92FFCBB2BBC8A4973C41719087F0B1527C8049F73C1061D10AE8E2995C63F4C8D15D690B57BDE10865F7B9F728E5BEDA522B74DA20413B77AB9FCC189279D6DAF1A9B81156F</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 = 50F897F754BC90122EC904E0797B56062100C1091339D3EBF5991350BAFFA1B096DDC7CD6DE9AA8ED200A7B3F0D73A568BFC94F2833EFE005BD990C02A0B80B49C6370D46B97BE7CEC46F5A228D01014DD0D9BA1FBDC1D841AEC0BFF5EA2067AB9E504B4FE2FD8340C1828B5C5D278698ED7AE01F08D494A35648C3B31147C38A13F62EFD65510F0E0C3583FED00048C6DADFAF143398B24ED7F1338FCCBEA03DFC0AD86247F5D380706F59CCA61F1E22636FE985B421BF33AE45843B96548DAB274D624AAEDA2054CFCC8DCED7867E409B78952CDA85CFC6BF2F56FA028C591BD90A8A77E976D73BFCF2FAE57546E7C036E6D5390EC7C070360CD6E8F9E44CA</code></pre>
<pre><code>encrypted_data = 2E6E0EAD1DEB5384ED80C51F511244964BD28881D2834D404937453820569DAABDC1A091E743CB81E614E9B6EA3299A31E76632D8A2E0028C7A1AC18F7C8F6439F34D397C85101F33DBE1D1C5C7552A447B2602F28C9DBF07875F7B663AB4EA93118922E95E79F5873C7335A3F041C3D971689EA77055DDD6E795AEE357460DD34728D1B142E7018093E4147B278DC83CE72E1527C22EA7297B47D080EF882224CF9D5FB4CCC9BB8C24840B22E92817D5F2C7668D767815C30792983B8743AFFD905CD0E028DC4546BDE9AEB2C105543A3E87A92D44546F618047E78D19C1F380EDD8704E5B21F2370B01902DF0269FDA91D7EB4A064D40ABAD23995F3C224D1</code></pre>
<!-- end p_q_inner_data_output -->
<p>The length of the final string is 256 bytes.</p>
<h5><a class="anchor" href="#5-send-req-dh-params-query-with-generated-encrypted-data" id="5-send-req-dh-params-query-with-generated-encrypted-data" name="5-send-req-dh-params-query-with-generated-encrypted-data"><i class="anchor-icon"></i></a>5) Send req_DH_params query with generated <code>encrypted_data</code></h5>
<!-- start req_DH_params -->
<p>Sent payload (excluding transport headers/trailers):</p>
<pre><code>0000 | 00 00 00 00 00 00 00 00 F0 70 06 00 E8 2E 7B 66
0010 | 40 01 00 00 BE E4 12 D7 FE 76 51 D6 28 ED 47 10
0020 | EE 66 DE C7 F2 89 F2 D3 A8 71 EC 90 54 40 E9 4F
0030 | 36 CA AE 3C 16 AE 24 E1 04 62 5C C6 81 00 00 00
0040 | 04 6A D2 BD 33 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 50 F8 97 F7 54 BC 90 12 2E C9 04 E0
0060 | 79 7B 56 06 21 00 C1 09 13 39 D3 EB F5 99 13 50
0070 | BA FF A1 B0 96 DD C7 CD 6D E9 AA 8E D2 00 A7 B3
0080 | F0 D7 3A 56 8B FC 94 F2 83 3E FE 00 5B D9 90 C0
0090 | 2A 0B 80 B4 9C 63 70 D4 6B 97 BE 7C EC 46 F5 A2
00A0 | 28 D0 10 14 DD 0D 9B A1 FB DC 1D 84 1A EC 0B FF
00B0 | 5E A2 06 7A B9 E5 04 B4 FE 2F D8 34 0C 18 28 B5
00C0 | C5 D2 78 69 8E D7 AE 01 F0 8D 49 4A 35 64 8C 3B
00D0 | 31 14 7C 38 A1 3F 62 EF D6 55 10 F0 E0 C3 58 3F
00E0 | ED 00 04 8C 6D AD FA F1 43 39 8B 24 ED 7F 13 38
00F0 | FC CB EA 03 DF C0 AD 86 24 7F 5D 38 07 06 F5 9C
0100 | CA 61 F1 E2 26 36 FE 98 5B 42 1B F3 3A E4 58 43
0110 | B9 65 48 DA B2 74 D6 24 AA ED A2 05 4C FC C8 DC
0120 | ED 78 67 E4 09 B7 89 52 CD A8 5C FC 6B F2 F5 6F
0130 | A0 28 C5 91 BD 90 A8 A7 7E 97 6D 73 BF CF 2F AE
0140 | 57 54 6E 7C 03 6E 6D 53 90 EC 7C 07 03 60 CD 6E
0150 | 8F 9E 44 CA</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 04 05 0B 00 9D 54 7C 66
0010 | 40 01 00 00 BE E4 12 D7 93 10 2C AE BB 91 9E 9C
0020 | 27 B0 00 AA 59 D8 3F D7 8D 2B 59 2A 7F 3E D1 0F
0030 | 45 D4 06 FD 35 9F D1 D0 04 58 FC D1 73 00 00 00
0040 | 04 63 BC 31 11 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 2E 6E 0E AD 1D EB 53 84 ED 80 C5 1F
0060 | 51 12 44 96 4B D2 88 81 D2 83 4D 40 49 37 45 38
0070 | 20 56 9D AA BD C1 A0 91 E7 43 CB 81 E6 14 E9 B6
0080 | EA 32 99 A3 1E 76 63 2D 8A 2E 00 28 C7 A1 AC 18
0090 | F7 C8 F6 43 9F 34 D3 97 C8 51 01 F3 3D BE 1D 1C
00A0 | 5C 75 52 A4 47 B2 60 2F 28 C9 DB F0 78 75 F7 B6
00B0 | 63 AB 4E A9 31 18 92 2E 95 E7 9F 58 73 C7 33 5A
00C0 | 3F 04 1C 3D 97 16 89 EA 77 05 5D DD 6E 79 5A EE
00D0 | 35 74 60 DD 34 72 8D 1B 14 2E 70 18 09 3E 41 47
00E0 | B2 78 DC 83 CE 72 E1 52 7C 22 EA 72 97 B4 7D 08
00F0 | 0E F8 82 22 4C F9 D5 FB 4C CC 9B B8 C2 48 40 B2
0100 | 2E 92 81 7D 5F 2C 76 68 D7 67 81 5C 30 79 29 83
0110 | B8 74 3A FF D9 05 CD 0E 02 8D C4 54 6B DE 9A EB
0120 | 2C 10 55 43 A3 E8 7A 92 D4 45 46 F6 18 04 7E 78
0130 | D1 9C 1F 38 0E DD 87 04 E5 B2 1F 23 70 B0 19 02
0140 | DF 02 69 FD A9 1D 7E B4 A0 64 D4 0A BA D2 39 95
0150 | F3 C2 24 D1</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 = 10E6A86C7055C990CB7E20A61032FEEC341959199DBE48C3B6EF7B24A
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>F0700600E82E7B66</code></td>
<td><code>04050B009D547C66</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 = 10E6A86C7055C990CB7E20A61032FEEC341959199DBE48C3B6EF7B24A
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>FE7651D628ED4710EE66DEC7F289F2D3</code></td>
<td><code>93102CAEBB919E9C27B000AA59D83FD7</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>A871EC905440E94F36CAAE3C16AE24E1</code></td>
<td><code>8D2B592A7F3ED10F45D406FD359FD1D0</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>p</td>
<td>56, 8</td>
<td><code>04625CC681000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1650247297</td>
<td><code>0458FCD173000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1492963699</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>046AD2BD33000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1792195891</td>
<td><code>0463BC3111000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1673277713</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 = 10E6A86C7055C990CB7E20A61032FEEC341959199DBE48C3B6EF7B24A
<tr>
<td>encrypted_data</td>
<td>80, 260</td>
<td><code>FE00010050F897F754BC90122EC904E0</code> <code>797B56062100C1091339D3EBF5991350</code> <code>BAFFA1B096DDC7CD6DE9AA8ED200A7B3</code> <code>F0D73A568BFC94F2833EFE005BD990C0</code> <code>2A0B80B49C6370D46B97BE7CEC46F5A2</code> <code>28D01014DD0D9BA1FBDC1D841AEC0BFF</code> <code>5EA2067AB9E504B4FE2FD8340C1828B5</code> <code>C5D278698ED7AE01F08D494A35648C3B</code> <code>31147C38A13F62EFD65510F0E0C3583F</code> <code>ED00048C6DADFAF143398B24ED7F1338</code> <code>FCCBEA03DFC0AD86247F5D380706F59C</code> <code>CA61F1E22636FE985B421BF33AE45843</code> <code>B96548DAB274D624AAEDA2054CFCC8DC</code> <code>ED7867E409B78952CDA85CFC6BF2F56F</code> <code>A028C591BD90A8A77E976D73BFCF2FAE</code> <code>57546E7C036E6D5390EC7C070360CD6E</code><br> <code>8F9E44CA</code></td>
<td><code>FE0001002E6E0EAD1DEB5384ED80C51F</code> <code>511244964BD28881D2834D4049374538</code> <code>20569DAABDC1A091E743CB81E614E9B6</code> <code>EA3299A31E76632D8A2E0028C7A1AC18</code> <code>F7C8F6439F34D397C85101F33DBE1D1C</code> <code>5C7552A447B2602F28C9DBF07875F7B6</code> <code>63AB4EA93118922E95E79F5873C7335A</code> <code>3F041C3D971689EA77055DDD6E795AEE</code> <code>357460DD34728D1B142E7018093E4147</code> <code>B278DC83CE72E1527C22EA7297B47D08</code> <code>0EF882224CF9D5FB4CCC9BB8C24840B2</code> <code>2E92817D5F2C7668D767815C30792983</code> <code>B8743AFFD905CD0E028DC4546BDE9AEB</code> <code>2C105543A3E87A92D44546F618047E78</code> <code>D19C1F380EDD8704E5B21F2370B01902</code> <code>DF0269FDA91D7EB4A064D40ABAD23995</code><br> <code>F3C224D1</code></td>
<td>Value generated above</td>
</tr>
</tbody>
@ -402,47 +402,47 @@ random_padding_bytes = 10E6A86C7055C990CB7E20A61032FEEC341959199DBE48C3B6EF7B24A
<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 5C F5 4F E9 2E 7B 66
0010 | C0 02 00 00 5C 07 E8 D0 FE 76 51 D6 28 ED 47 10
0020 | EE 66 DE C7 F2 89 F2 D3 A8 71 EC 90 54 40 E9 4F
0030 | 36 CA AE 3C 16 AE 24 E1 FE 50 02 00 7B 33 7C 45
0040 | 5B C8 B9 56 F0 BA 88 DA 47 72 4C E9 C3 79 5B 2F
0050 | 87 03 98 67 B0 4A 1F 16 D7 27 E0 33 A7 0D 00 18
0060 | FF 6D 63 20 B6 E7 FC 41 94 7F 96 8A F9 BD 4E 91
0070 | E8 4B 7B 43 8E 6C 23 E2 51 7C 8C 47 A2 8E D7 55
0080 | 6F 18 4B AF 5A B3 5E 17 82 BD 0D 34 FC 0F 0D 4D
0090 | CB D0 F7 BE C7 27 B1 CD FE F4 BC 37 E9 82 F8 9E
00A0 | 0B DA 30 8A D2 D3 31 54 B8 78 07 3F 46 F9 4E 8B
00B0 | E2 41 0D 2A 36 A8 99 51 3E 0D 3E 73 EA 56 B1 12
00C0 | AA 3D 26 7D 71 CB AA CC 73 53 B8 CF ED 98 40 C4
00D0 | 50 36 6F 33 1A C1 C1 23 7C B4 4B 58 F1 46 3B B1
00E0 | 99 C0 D9 E4 97 14 C9 C2 5E FC F9 8A DE DC 81 21
00F0 | 4A 2A CF 62 4A 18 BE A0 81 43 54 B9 10 79 54 77
0100 | EF 87 28 6D 27 4C 48 09 DC 93 21 19 9D D0 73 CD
0110 | A5 E7 E0 AB 42 C2 9C 23 62 ED B8 FE E9 98 8B DF
0120 | 31 2C 8D 6D 2B 74 74 C6 92 29 1F 53 3A 36 93 E3
0130 | 6C A6 AE CB 30 F9 10 E2 79 F4 42 83 A3 7F 53 93
0140 | 0A C4 05 5D F5 49 3D A7 DC E7 AE 3B 5B B7 1D 10
0150 | BC 3D 20 DF 5A F7 9F B4 7F B2 91 6B 77 AC 47 7F
0160 | FC 89 0D 64 6C DE C2 3A AD B5 7C A6 AA 05 87 94
0170 | 7F 74 65 BC A4 09 02 12 3E 97 EB 97 ED 1D A5 C1
0180 | 33 2D 34 A8 93 10 C4 06 B7 29 E2 64 4F A3 F7 D2
0190 | 4B A1 70 0C 13 27 27 4E 78 D1 93 18 5E 4B D0 4C
01A0 | 99 0F 3A E7 AD 30 3E FF BA 61 C7 76 D5 6D 2C A1
01B0 | F5 06 94 9B 82 A7 8F ED 69 E7 75 C6 6C 17 F1 8C
01C0 | B0 38 77 E4 08 28 D0 11 ED 2A 62 54 11 FE 8D 12
01D0 | 63 4B 38 E3 14 90 E2 0A 4A 52 96 38 11 08 51 0E
01E0 | 6D 8B E8 77 79 5F 78 E4 08 3D 56 DA 6E 5D F0 BB
01F0 | 57 A6 E7 BF C1 58 8B 3A 6B B7 DB 99 AE DB 98 BD
0200 | C3 BC F9 C8 98 DA 65 DB 19 78 70 AB 7A F3 B7 E3
0210 | 36 5F 18 F3 9A 37 7A E0 7C 17 24 08 85 A3 D9 A9
0220 | AC 2A C1 74 00 E9 83 96 6F AA BF 89 05 30 B2 81
0230 | BA FE 53 C7 D5 A3 0F A4 CA DA 81 4F 5B AB 69 85
0240 | 67 BE BC 09 B1 C9 64 23 E9 36 6E AB 82 8D 25 2A
0250 | 42 1D C0 4E C3 BF DF 8D DB 16 2B 9D 9B AC 4A 42
0260 | CC 60 1D 69 A0 55 10 B4 81 0D DA C4 2B 3D B6 45
0270 | 91 13 CC 4C 7A F3 1D 7C 7F F8 38 18 56 19 AA 30
0280 | FE 96 8E B4 59 B5 26 E7 6C 60 34 FC</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 BC DB 57 9E 54 7C 66
0010 | 84 02 00 00 5C 07 E8 D0 93 10 2C AE BB 91 9E 9C
0020 | 27 B0 00 AA 59 D8 3F D7 8D 2B 59 2A 7F 3E D1 0F
0030 | 45 D4 06 FD 35 9F D1 D0 FE 50 02 00 3E 63 FA 8F
0040 | 22 21 B6 3E 02 3E 30 41 CA A5 76 0E 29 DB C8 C2
0050 | 47 CA CE F4 B3 6F 62 8A BD 03 BA DC AC FC 10 51
0060 | 27 18 03 93 5B 9F B8 6D 46 0B 86 AE 2D 5F 97 82
0070 | 28 95 D0 F1 70 A6 E1 0D 84 32 EA 8E D2 3E 1E 39
0080 | 5A A6 D5 02 F7 75 0C 3E 8C 77 10 57 FD A2 67 AD
0090 | E3 20 E6 23 41 62 58 A7 BF 2E 03 23 B8 2A BB 42
00A0 | 54 7B 1C 60 05 39 65 82 EF 35 DC BA CC D7 55 4A
00B0 | C0 04 3D 73 37 6F 8C 22 F9 8A 78 1B E7 C9 62 FF
00C0 | A1 D2 D3 26 6E B4 0A 2D 38 5B F4 1E 3E 0B 5C C6
00D0 | E2 A5 AA 68 38 3A A5 5E AB 1C 58 8D 6E 96 AE C3
00E0 | 14 DE BD EB 7B 94 5B E7 BD 4A A3 3D 6B 60 DC D5
00F0 | 66 2D 53 C2 6C 10 D7 E1 99 81 C0 82 3C EA A2 CB
0100 | FF D6 98 D7 21 83 6A 6B 22 23 33 FD C4 19 8F A8
0110 | EB 4D F2 2F D1 90 E0 71 4F C9 52 8F 6C BD B2 CE
0120 | DA 6A DD 05 49 24 3E B8 70 FE 90 44 E0 93 FD 73
0130 | 27 A8 D9 6C DC F7 79 8F 48 74 5A 3D 8D E3 FA B7
0140 | 38 27 7E 6A C2 E6 0D 9A 22 78 5D 88 BF 91 92 24
0150 | 59 D5 55 4E 7D DD 04 73 99 74 B1 7B 09 2A F4 CF
0160 | DF 86 FC 9F 57 CA 48 51 3D B9 C8 7A 6F B8 3C 71
0170 | 55 9E FD 27 45 20 CB 84 E8 10 FC 64 65 9F 53 D3
0180 | 73 4F CC 19 90 0E 14 0D 08 F5 12 F2 32 4D 2C BF
0190 | D1 3F 19 A6 F4 33 0E D5 3C 17 2F 28 FA 2F B1 24
01A0 | 83 65 1F BC BD CD E1 74 A1 40 FA 6B 76 F2 14 BB
01B0 | 0F 8F 80 19 73 A4 E8 FF DE BA 33 1F 07 99 20 8C
01C0 | 37 BA 69 91 9F 91 08 1A DD 00 98 46 98 3F CB E4
01D0 | 1D F1 13 51 4C 55 C7 57 60 CD 8C E0 AF D1 17 E2
01E0 | FD 02 B3 5D 92 DE C1 25 AB 70 3C A7 E8 36 19 6E
01F0 | 39 89 59 05 2A 2F E8 E3 E9 87 9D BD 60 35 FA CB
0200 | 40 00 F9 CF F2 37 1F FE C8 FF 3A 82 A3 06 EE 8E
0210 | 37 B3 08 68 C5 A8 22 AF 85 03 D8 6C 30 FC AF 0C
0220 | 41 81 C0 06 5A 5F 15 CD E1 BD 28 25 3A D3 D4 1D
0230 | E2 03 7E 40 44 94 1A 85 8C B6 5B DB 14 E4 9F 44
0240 | 88 57 D8 E0 7F F6 38 95 6B 1F C0 F1 46 31 3C 69
0250 | 18 90 DE 2C B8 1C 0C 79 AB 79 0D B1 40 8D 7C 3F
0260 | EF 36 A2 D7 9E 4C 57 03 1E B4 5D DB B6 BE 51 21
0270 | DD 7B 33 B0 A0 B1 22 8A CD 61 97 EF 0F 38 A1 D0
0280 | 51 43 C0 AC 03 10 EB A7 01 8D 30 22</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 = 10E6A86C7055C990CB7E20A61032FEEC341959199DBE48C3B6EF7B24A
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>015CF54FE92E7B66</code></td>
<td><code>01BCDB579E547C66</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>C0020000</code> (704 in decimal)</td>
<td><code>84020000</code> (644 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -482,19 +482,19 @@ random_padding_bytes = 10E6A86C7055C990CB7E20A61032FEEC341959199DBE48C3B6EF7B24A
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>FE7651D628ED4710EE66DEC7F289F2D3</code></td>
<td><code>93102CAEBB919E9C27B000AA59D83FD7</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>A871EC905440E94F36CAAE3C16AE24E1</code></td>
<td><code>8D2B592A7F3ED10F45D406FD359FD1D0</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_answer</td>
<td>56, 596</td>
<td><code>FE5002007B337C455BC8B956F0BA88DA</code> <code>47724CE9C3795B2F87039867B04A1F16</code> <code>D727E033A70D0018FF6D6320B6E7FC41</code> <code>947F968AF9BD4E91E84B7B438E6C23E2</code> <code>517C8C47A28ED7556F184BAF5AB35E17</code> <code>82BD0D34FC0F0D4DCBD0F7BEC727B1CD</code> <code>FEF4BC37E982F89E0BDA308AD2D33154</code> <code>B878073F46F94E8BE2410D2A36A89951</code> <code>3E0D3E73EA56B112AA3D267D71CBAACC</code> <code>7353B8CFED9840C450366F331AC1C123</code> <code>7CB44B58F1463BB199C0D9E49714C9C2</code> <code>5EFCF98ADEDC81214A2ACF624A18BEA0</code> <code>814354B910795477EF87286D274C4809</code> <code>DC9321199DD073CDA5E7E0AB42C29C23</code> <code>62EDB8FEE9988BDF312C8D6D2B7474C6</code> <code>92291F533A3693E36CA6AECB30F910E2</code> <code>79F44283A37F53930AC4055DF5493DA7</code> <code>DCE7AE3B5BB71D10BC3D20DF5AF79FB4</code> <code>7FB2916B77AC477FFC890D646CDEC23A</code> <code>ADB57CA6AA0587947F7465BCA4090212</code> <code>3E97EB97ED1DA5C1332D34A89310C406</code> <code>B729E2644FA3F7D24BA1700C1327274E</code> <code>78D193185E4BD04C990F3AE7AD303EFF</code> <code>BA61C776D56D2CA1F506949B82A78FED</code> <code>69E775C66C17F18CB03877E40828D011</code> <code>ED2A625411FE8D12634B38E31490E20A</code> <code>4A5296381108510E6D8BE877795F78E4</code> <code>083D56DA6E5DF0BB57A6E7BFC1588B3A</code> <code>6BB7DB99AEDB98BDC3BCF9C898DA65DB</code> <code>197870AB7AF3B7E3365F18F39A377AE0</code> <code>7C17240885A3D9A9AC2AC17400E98396</code> <code>6FAABF890530B281BAFE53C7D5A30FA4</code> <code>CADA814F5BAB698567BEBC09B1C96423</code> <code>E9366EAB828D252A421DC04EC3BFDF8D</code> <code>DB162B9D9BAC4A42CC601D69A05510B4</code> <code>810DDAC42B3DB6459113CC4C7AF31D7C</code> <code>7FF838185619AA30FE968EB459B526E7</code><br> <code>6C6034FC</code></td>
<td><code>FE5002003E63FA8F2221B63E023E3041</code> <code>CAA5760E29DBC8C247CACEF4B36F628A</code> <code>BD03BADCACFC1051271803935B9FB86D</code> <code>460B86AE2D5F97822895D0F170A6E10D</code> <code>8432EA8ED23E1E395AA6D502F7750C3E</code> <code>8C771057FDA267ADE320E623416258A7</code> <code>BF2E0323B82ABB42547B1C6005396582</code> <code>EF35DCBACCD7554AC0043D73376F8C22</code> <code>F98A781BE7C962FFA1D2D3266EB40A2D</code> <code>385BF41E3E0B5CC6E2A5AA68383AA55E</code> <code>AB1C588D6E96AEC314DEBDEB7B945BE7</code> <code>BD4AA33D6B60DCD5662D53C26C10D7E1</code> <code>9981C0823CEAA2CBFFD698D721836A6B</code> <code>222333FDC4198FA8EB4DF22FD190E071</code> <code>4FC9528F6CBDB2CEDA6ADD0549243EB8</code> <code>70FE9044E093FD7327A8D96CDCF7798F</code> <code>48745A3D8DE3FAB738277E6AC2E60D9A</code> <code>22785D88BF91922459D5554E7DDD0473</code> <code>9974B17B092AF4CFDF86FC9F57CA4851</code> <code>3DB9C87A6FB83C71559EFD274520CB84</code> <code>E810FC64659F53D3734FCC19900E140D</code> <code>08F512F2324D2CBFD13F19A6F4330ED5</code> <code>3C172F28FA2FB12483651FBCBDCDE174</code> <code>A140FA6B76F214BB0F8F801973A4E8FF</code> <code>DEBA331F0799208C37BA69919F91081A</code> <code>DD009846983FCBE41DF113514C55C757</code> <code>60CD8CE0AFD117E2FD02B35D92DEC125</code> <code>AB703CA7E836196E398959052A2FE8E3</code> <code>E9879DBD6035FACB4000F9CFF2371FFE</code> <code>C8FF3A82A306EE8E37B30868C5A822AF</code> <code>8503D86C30FCAF0C4181C0065A5F15CD</code> <code>E1BD28253AD3D41DE2037E4044941A85</code> <code>8CB65BDB14E49F448857D8E07FF63895</code> <code>6B1FC0F146313C691890DE2CB81C0C79</code> <code>AB790DB1408D7C3FEF36A2D79E4C5703</code> <code>1EB45DDBB6BE5121DD7B33B0A0B1228A</code> <code>CD6197EF0F38A1D05143C0AC0310EBA7</code><br> <code>018D3022</code></td>
<td>See below</td>
</tr>
</tbody>
@ -502,20 +502,20 @@ random_padding_bytes = 10E6A86C7055C990CB7E20A61032FEEC341959199DBE48C3B6EF7B24A
<!-- 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 = 7B337C455BC8B956F0BA88DA47724CE9C3795B2F87039867B04A1F16D727E033A70D0018FF6D6320B6E7FC41947F968AF9BD4E91E84B7B438E6C23E2517C8C47A28ED7556F184BAF5AB35E1782BD0D34FC0F0D4DCBD0F7BEC727B1CDFEF4BC37E982F89E0BDA308AD2D33154B878073F46F94E8BE2410D2A36A899513E0D3E73EA56B112AA3D267D71CBAACC7353B8CFED9840C450366F331AC1C1237CB44B58F1463BB199C0D9E49714C9C25EFCF98ADEDC81214A2ACF624A18BEA0814354B910795477EF87286D274C4809DC9321199DD073CDA5E7E0AB42C29C2362EDB8FEE9988BDF312C8D6D2B7474C692291F533A3693E36CA6AECB30F910E279F44283A37F53930AC4055DF5493DA7DCE7AE3B5BB71D10BC3D20DF5AF79FB47FB2916B77AC477FFC890D646CDEC23AADB57CA6AA0587947F7465BCA40902123E97EB97ED1DA5C1332D34A89310C406B729E2644FA3F7D24BA1700C1327274E78D193185E4BD04C990F3AE7AD303EFFBA61C776D56D2CA1F506949B82A78FED69E775C66C17F18CB03877E40828D011ED2A625411FE8D12634B38E31490E20A4A5296381108510E6D8BE877795F78E4083D56DA6E5DF0BB57A6E7BFC1588B3A6BB7DB99AEDB98BDC3BCF9C898DA65DB197870AB7AF3B7E3365F18F39A377AE07C17240885A3D9A9AC2AC17400E983966FAABF890530B281BAFE53C7D5A30FA4CADA814F5BAB698567BEBC09B1C96423E9366EAB828D252A421DC04EC3BFDF8DDB162B9D9BAC4A42CC601D69A05510B4810DDAC42B3DB6459113CC4C7AF31D7C7FF838185619AA30FE968EB459B526E76C6034FC
tmp_aes_key = D643DDC0A2EF8831729DB7D01C356F174CE09C6C8C26008E1A16BD197F89579A
tmp_aes_iv = 5136F208E6F269F4963A2965142188C736DBB06227671DFBAB563A056956FEC1</code></pre>
<pre><code>encrypted_answer = 3E63FA8F2221B63E023E3041CAA5760E29DBC8C247CACEF4B36F628ABD03BADCACFC1051271803935B9FB86D460B86AE2D5F97822895D0F170A6E10D8432EA8ED23E1E395AA6D502F7750C3E8C771057FDA267ADE320E623416258A7BF2E0323B82ABB42547B1C6005396582EF35DCBACCD7554AC0043D73376F8C22F98A781BE7C962FFA1D2D3266EB40A2D385BF41E3E0B5CC6E2A5AA68383AA55EAB1C588D6E96AEC314DEBDEB7B945BE7BD4AA33D6B60DCD5662D53C26C10D7E19981C0823CEAA2CBFFD698D721836A6B222333FDC4198FA8EB4DF22FD190E0714FC9528F6CBDB2CEDA6ADD0549243EB870FE9044E093FD7327A8D96CDCF7798F48745A3D8DE3FAB738277E6AC2E60D9A22785D88BF91922459D5554E7DDD04739974B17B092AF4CFDF86FC9F57CA48513DB9C87A6FB83C71559EFD274520CB84E810FC64659F53D3734FCC19900E140D08F512F2324D2CBFD13F19A6F4330ED53C172F28FA2FB12483651FBCBDCDE174A140FA6B76F214BB0F8F801973A4E8FFDEBA331F0799208C37BA69919F91081ADD009846983FCBE41DF113514C55C75760CD8CE0AFD117E2FD02B35D92DEC125AB703CA7E836196E398959052A2FE8E3E9879DBD6035FACB4000F9CFF2371FFEC8FF3A82A306EE8E37B30868C5A822AF8503D86C30FCAF0C4181C0065A5F15CDE1BD28253AD3D41DE2037E4044941A858CB65BDB14E49F448857D8E07FF638956B1FC0F146313C691890DE2CB81C0C79AB790DB1408D7C3FEF36A2D79E4C57031EB45DDBB6BE5121DD7B33B0A0B1228ACD6197EF0F38A1D05143C0AC0310EBA7018D3022
tmp_aes_key = 50D5A9339BAD43D2C764AB7335AED393F367BFE6C5D8EB4518468F7478DFA7DF
tmp_aes_iv = 056F5C6B4E865E1617D6D5FFA603BD40556F13DF5839A806D036908F095D4535</code></pre>
<!-- end server_DH_inner_data_input -->
<p>Yielding:</p>
<!-- start server_DH_inner_data_output -->
<pre><code>answer_with_hash = 661B87493E4C91D6651897768B9645D16457093BBA0D89B5FE7651D628ED4710EE66DEC7F289F2D3A871EC905440E94F36CAAE3C16AE24E103000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100B0772194A508D6F92C5E914769EB206F31E755D07DB39AF339376EB2F3873B980F3F3BCAD528FF333F0AB24190887EE1D07E6112269098CE31D3EE52BAA09AF0EEAA1260A9B269F97916C9276B6176D314D1B65A55A59B523D41DFA9F7138D18FD73F265F93B52B93980841B1BE965BD775D3F52A23D5544367C6F6E8FB2F0D237D5970BD0A326606C7325B740EBCB82C30C69D62EB9D2E412567795A891878F0FEC03572B70A7396EC7186EDF10AF4A07F92964ED8FD6C397FDE724B33B150B4C58FE81CC0173731F40EA16F1ACD2C26EF2B88CE1AAA4572162D6F13EF04056CD54EE6AC8709B3CA411957240CFAA66354D5D4257FF5342B110F22AE3C3B186E92E7B664E5FA4C64957CFB2
answer = BA0D89B5FE7651D628ED4710EE66DEC7F289F2D3A871EC905440E94F36CAAE3C16AE24E103000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100B0772194A508D6F92C5E914769EB206F31E755D07DB39AF339376EB2F3873B980F3F3BCAD528FF333F0AB24190887EE1D07E6112269098CE31D3EE52BAA09AF0EEAA1260A9B269F97916C9276B6176D314D1B65A55A59B523D41DFA9F7138D18FD73F265F93B52B93980841B1BE965BD775D3F52A23D5544367C6F6E8FB2F0D237D5970BD0A326606C7325B740EBCB82C30C69D62EB9D2E412567795A891878F0FEC03572B70A7396EC7186EDF10AF4A07F92964ED8FD6C397FDE724B33B150B4C58FE81CC0173731F40EA16F1ACD2C26EF2B88CE1AAA4572162D6F13EF04056CD54EE6AC8709B3CA411957240CFAA66354D5D4257FF5342B110F22AE3C3B186E92E7B664E5FA4C64957CFB2</code></pre>
<pre><code>answer_with_hash = E40D8CA2F25AA7452CE0F723AC8A26ED53069D69BA0D89B593102CAEBB919E9C27B000AA59D83FD78D2B592A7F3ED10F45D406FD359FD1D003000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100B54372DF3D272961E7D431788AC788B31AE3A8552F35C01FBEF0AAB2FABD7D05FCE8D8D258B970399DB43B23406F97CD9FA21AC5500DB026FBE48A960C0DF4AC21D541CC244F6E823C0490032C6E99C564784C09D68C47BD14A37A35683FFBAF2A15F38471505A26DC289AA4E580ED517AE6FA5D71F976468D445AB94B5C0DD08F5D62145DFD8ACEDD58719C6CA9614C845E95EFE971758D1473498A5A75DBDF1833F15A76A79DB73964DFD6A98B8FDD1219C927956DB33F85A0EA16B450A928421BB3EEC5C9BF4CC9C13866CED40969C533587C7D27C65BC59B08654896E612491943E835BB8146277517815C980503D13E46E43DF8AA6C8BD9A3D5B1E097BD9E547C6693750A1B18A2A922
answer = BA0D89B593102CAEBB919E9C27B000AA59D83FD78D2B592A7F3ED10F45D406FD359FD1D003000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100B54372DF3D272961E7D431788AC788B31AE3A8552F35C01FBEF0AAB2FABD7D05FCE8D8D258B970399DB43B23406F97CD9FA21AC5500DB026FBE48A960C0DF4AC21D541CC244F6E823C0490032C6E99C564784C09D68C47BD14A37A35683FFBAF2A15F38471505A26DC289AA4E580ED517AE6FA5D71F976468D445AB94B5C0DD08F5D62145DFD8ACEDD58719C6CA9614C845E95EFE971758D1473498A5A75DBDF1833F15A76A79DB73964DFD6A98B8FDD1219C927956DB33F85A0EA16B450A928421BB3EEC5C9BF4CC9C13866CED40969C533587C7D27C65BC59B08654896E612491943E835BB8146277517815C980503D13E46E43DF8AA6C8BD9A3D5B1E097BD9E547C6693750A1B18A2A922</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 FE 76 51 D6 28 ED 47 10 EE 66 DE C7
0010 | F2 89 F2 D3 A8 71 EC 90 54 40 E9 4F 36 CA AE 3C
0020 | 16 AE 24 E1 03 00 00 00 FE 00 01 00 C7 1C AE B9
<pre><code>0000 | BA 0D 89 B5 93 10 2C AE BB 91 9E 9C 27 B0 00 AA
0010 | 59 D8 3F D7 8D 2B 59 2A 7F 3E D1 0F 45 D4 06 FD
0020 | 35 9F D1 D0 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 = BA0D89B5FE7651D628ED4710EE66DEC7F289F2D3A871EC905440E94F36CAAE3C16AE24E
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 | B0 77 21 94 A5 08 D6 F9 2C 5E 91 47 69 EB 20 6F
0140 | 31 E7 55 D0 7D B3 9A F3 39 37 6E B2 F3 87 3B 98
0150 | 0F 3F 3B CA D5 28 FF 33 3F 0A B2 41 90 88 7E E1
0160 | D0 7E 61 12 26 90 98 CE 31 D3 EE 52 BA A0 9A F0
0170 | EE AA 12 60 A9 B2 69 F9 79 16 C9 27 6B 61 76 D3
0180 | 14 D1 B6 5A 55 A5 9B 52 3D 41 DF A9 F7 13 8D 18
0190 | FD 73 F2 65 F9 3B 52 B9 39 80 84 1B 1B E9 65 BD
01A0 | 77 5D 3F 52 A2 3D 55 44 36 7C 6F 6E 8F B2 F0 D2
01B0 | 37 D5 97 0B D0 A3 26 60 6C 73 25 B7 40 EB CB 82
01C0 | C3 0C 69 D6 2E B9 D2 E4 12 56 77 95 A8 91 87 8F
01D0 | 0F EC 03 57 2B 70 A7 39 6E C7 18 6E DF 10 AF 4A
01E0 | 07 F9 29 64 ED 8F D6 C3 97 FD E7 24 B3 3B 15 0B
01F0 | 4C 58 FE 81 CC 01 73 73 1F 40 EA 16 F1 AC D2 C2
0200 | 6E F2 B8 8C E1 AA A4 57 21 62 D6 F1 3E F0 40 56
0210 | CD 54 EE 6A C8 70 9B 3C A4 11 95 72 40 CF AA 66
0220 | 35 4D 5D 42 57 FF 53 42 B1 10 F2 2A E3 C3 B1 86
0230 | E9 2E 7B 66</code></pre>
0130 | B5 43 72 DF 3D 27 29 61 E7 D4 31 78 8A C7 88 B3
0140 | 1A E3 A8 55 2F 35 C0 1F BE F0 AA B2 FA BD 7D 05
0150 | FC E8 D8 D2 58 B9 70 39 9D B4 3B 23 40 6F 97 CD
0160 | 9F A2 1A C5 50 0D B0 26 FB E4 8A 96 0C 0D F4 AC
0170 | 21 D5 41 CC 24 4F 6E 82 3C 04 90 03 2C 6E 99 C5
0180 | 64 78 4C 09 D6 8C 47 BD 14 A3 7A 35 68 3F FB AF
0190 | 2A 15 F3 84 71 50 5A 26 DC 28 9A A4 E5 80 ED 51
01A0 | 7A E6 FA 5D 71 F9 76 46 8D 44 5A B9 4B 5C 0D D0
01B0 | 8F 5D 62 14 5D FD 8A CE DD 58 71 9C 6C A9 61 4C
01C0 | 84 5E 95 EF E9 71 75 8D 14 73 49 8A 5A 75 DB DF
01D0 | 18 33 F1 5A 76 A7 9D B7 39 64 DF D6 A9 8B 8F DD
01E0 | 12 19 C9 27 95 6D B3 3F 85 A0 EA 16 B4 50 A9 28
01F0 | 42 1B B3 EE C5 C9 BF 4C C9 C1 38 66 CE D4 09 69
0200 | C5 33 58 7C 7D 27 C6 5B C5 9B 08 65 48 96 E6 12
0210 | 49 19 43 E8 35 BB 81 46 27 75 17 81 5C 98 05 03
0220 | D1 3E 46 E4 3D F8 AA 6C 8B D9 A3 D5 B1 E0 97 BD
0230 | 9E 54 7C 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 = BA0D89B5FE7651D628ED4710EE66DEC7F289F2D3A871EC905440E94F36CAAE3C16AE24E
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>FE7651D628ED4710EE66DEC7F289F2D3</code></td>
<td><code>93102CAEBB919E9C27B000AA59D83FD7</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>A871EC905440E94F36CAAE3C16AE24E1</code></td>
<td><code>8D2B592A7F3ED10F45D406FD359FD1D0</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
@ -594,13 +594,13 @@ answer = BA0D89B5FE7651D628ED4710EE66DEC7F289F2D3A871EC905440E94F36CAAE3C16AE24E
<tr>
<td>g_a</td>
<td>300, 260</td>
<td><code>FE000100B0772194A508D6F92C5E9147</code> <code>69EB206F31E755D07DB39AF339376EB2</code> <code>F3873B980F3F3BCAD528FF333F0AB241</code> <code>90887EE1D07E6112269098CE31D3EE52</code> <code>BAA09AF0EEAA1260A9B269F97916C927</code> <code>6B6176D314D1B65A55A59B523D41DFA9</code> <code>F7138D18FD73F265F93B52B93980841B</code> <code>1BE965BD775D3F52A23D5544367C6F6E</code> <code>8FB2F0D237D5970BD0A326606C7325B7</code> <code>40EBCB82C30C69D62EB9D2E412567795</code> <code>A891878F0FEC03572B70A7396EC7186E</code> <code>DF10AF4A07F92964ED8FD6C397FDE724</code> <code>B33B150B4C58FE81CC0173731F40EA16</code> <code>F1ACD2C26EF2B88CE1AAA4572162D6F1</code> <code>3EF04056CD54EE6AC8709B3CA4119572</code> <code>40CFAA66354D5D4257FF5342B110F22A</code><br> <code>E3C3B186</code></td>
<td><code>FE000100B54372DF3D272961E7D43178</code> <code>8AC788B31AE3A8552F35C01FBEF0AAB2</code> <code>FABD7D05FCE8D8D258B970399DB43B23</code> <code>406F97CD9FA21AC5500DB026FBE48A96</code> <code>0C0DF4AC21D541CC244F6E823C049003</code> <code>2C6E99C564784C09D68C47BD14A37A35</code> <code>683FFBAF2A15F38471505A26DC289AA4</code> <code>E580ED517AE6FA5D71F976468D445AB9</code> <code>4B5C0DD08F5D62145DFD8ACEDD58719C</code> <code>6CA9614C845E95EFE971758D1473498A</code> <code>5A75DBDF1833F15A76A79DB73964DFD6</code> <code>A98B8FDD1219C927956DB33F85A0EA16</code> <code>B450A928421BB3EEC5C9BF4CC9C13866</code> <code>CED40969C533587C7D27C65BC59B0865</code> <code>4896E612491943E835BB814627751781</code> <code>5C980503D13E46E43DF8AA6C8BD9A3D5</code><br> <code>B1E097BD</code></td>
<td><code>g_a</code> diffie-hellman parameter</td>
</tr>
<tr>
<td>server_time</td>
<td>560, 4</td>
<td><code>E92E7B66</code> (1719348969 in decimal)</td>
<td><code>9E547C66</code> (1719424158 in decimal)</td>
<td>Server time</td>
</tr>
</tbody>
@ -609,34 +609,34 @@ answer = BA0D89B5FE7651D628ED4710EE66DEC7F289F2D3A871EC905440E94F36CAAE3C16AE24E
<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 = D50EA9047898647D4588A719EA6250AA9397A825CABBDE031EEB5F5D7599CD9C0C75FC693E10B1EEDC7218C5AFFA726ADDF4D1F873EB0FBC22997720873B942A698B0F99453934207D85EE0B5365CF2C9F2303AABDC705DFC0052FC27EC512024999D507012BCB3F8321FC461D34280F910BE7F9190AD931B9FDACCDF82448324025F84D65B472D090BA6E2DF03C5DF5A888A530AC1231B123A90E68F4CF1FDBD752A573682ED61C3893C1FFA38C729970AF28D4ECCF2AD1713957D695E550A978B88FDCE4531B936E4AAB7240815209A14AEB1D26EE8B48499E1E144F35CCDAFEDF3F203AD8357369CE7D8579133B4CD9929F6668A8492645932C334CAA16F8</code></pre>
<pre><code>b = 7519F4941FA4B012AE8C307E77F7F52CBD51E3A9B5473FD83B5220C99AD83081CB0DC9F9406B48D537ED9D2C910FCF19BC647AE363EF86944DC74CDDE73286B857A4D43D73D48F3192DFE8F7255F00A01634049E330D8699A2F34A8C304730BD31C7B86E254FC9345F965CDEE043D1CC8DDD1390F7A42B11B58DFC4B26BF9678397E88C0E8E7F0368186AA853F9C4CBF75200D3C508D6789BB10A4705C8F2AC2E2CC544812C64E0C8B720F9628C8705C562BAC39DCB949DCB05CB040552F366C16AA832BEA09E4668DF6539BD9E6AA2A61EA725922A02C9CE09E8796090E857C1A185119DA87F61655D3BA378486926E5B13DF626C1165B8812F3AE0B6F9891B</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 = 61F9C703D8BDB0F8C7F74ACD60E59C65B013F2933B888DA35D41195A13A548C27800FDCFEAEA1705DF8FE846734A74338A0CF0AAE517ABD824DFFEF0560C8F985375088B5E5DEB8F90D05863B8ACD0F5B53E625414D28E91AB1014A1EAA54D1465438ABCB19C0881751643689E674FBE3889D260455DC419A28FBB93499DBBC30C9F33CB2F1C35942198D66E89351C136762783773276E1C531F6CA97AA65CA92E4DD3106D62B277253A8594E838FF3BC858D7922D505ED1FA141A7F5339E33A59EAB18FA971FEE834D927D745580341C9ADF3467CB14DE6B7E54DE03402A86CCDD93D5E65A06B09C702F36E565116789F0D4E366F8E21FD992FFB63C6BBA32B</code></pre>
<pre><code>g_b = C1781601FF80F73A9C5446B9646E0592D84D80ADB8983E57C871E1386BCCEAFDC784FA30CE9430454CB6E5A2AB396F39E0EEC41B01B256391BAA2C52BD0EB15AE478B23A08A8D499EB75A9B8FC630F2D591C41783B8AE021B30FE57013B311CE776E6DA995DE02A6C6FC82823DBC81F3119B953B95F20AF505242CD63517650D0C03B72223531172AC02CA50FD0E2526D24D911BE9AFDCD25A1C5F18538796B51AFD2FCE0CEAB4E68154471744418B3D76F8047DC81E664E475B8131F133F9817B2E0D38AF1AEB4D60FAF4ABE091A4A282B3D8D138765795810C08681F680250900D7507B43D14EDA99449D1A7DD6BFB69BCE48399D3D52E5059269E3782B951</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 FE 76 51 D6 28 ED 47 10 EE 66 DE C7
0010 | F2 89 F2 D3 A8 71 EC 90 54 40 E9 4F 36 CA AE 3C
0020 | 16 AE 24 E1 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | 61 F9 C7 03 D8 BD B0 F8 C7 F7 4A CD 60 E5 9C 65
0040 | B0 13 F2 93 3B 88 8D A3 5D 41 19 5A 13 A5 48 C2
0050 | 78 00 FD CF EA EA 17 05 DF 8F E8 46 73 4A 74 33
0060 | 8A 0C F0 AA E5 17 AB D8 24 DF FE F0 56 0C 8F 98
0070 | 53 75 08 8B 5E 5D EB 8F 90 D0 58 63 B8 AC D0 F5
0080 | B5 3E 62 54 14 D2 8E 91 AB 10 14 A1 EA A5 4D 14
0090 | 65 43 8A BC B1 9C 08 81 75 16 43 68 9E 67 4F BE
00A0 | 38 89 D2 60 45 5D C4 19 A2 8F BB 93 49 9D BB C3
00B0 | 0C 9F 33 CB 2F 1C 35 94 21 98 D6 6E 89 35 1C 13
00C0 | 67 62 78 37 73 27 6E 1C 53 1F 6C A9 7A A6 5C A9
00D0 | 2E 4D D3 10 6D 62 B2 77 25 3A 85 94 E8 38 FF 3B
00E0 | C8 58 D7 92 2D 50 5E D1 FA 14 1A 7F 53 39 E3 3A
00F0 | 59 EA B1 8F A9 71 FE E8 34 D9 27 D7 45 58 03 41
0100 | C9 AD F3 46 7C B1 4D E6 B7 E5 4D E0 34 02 A8 6C
0110 | CD D9 3D 5E 65 A0 6B 09 C7 02 F3 6E 56 51 16 78
0120 | 9F 0D 4E 36 6F 8E 21 FD 99 2F FB 63 C6 BB A3 2B</code></pre>
<pre><code>0000 | 54 B6 43 66 93 10 2C AE BB 91 9E 9C 27 B0 00 AA
0010 | 59 D8 3F D7 8D 2B 59 2A 7F 3E D1 0F 45 D4 06 FD
0020 | 35 9F D1 D0 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | C1 78 16 01 FF 80 F7 3A 9C 54 46 B9 64 6E 05 92
0040 | D8 4D 80 AD B8 98 3E 57 C8 71 E1 38 6B CC EA FD
0050 | C7 84 FA 30 CE 94 30 45 4C B6 E5 A2 AB 39 6F 39
0060 | E0 EE C4 1B 01 B2 56 39 1B AA 2C 52 BD 0E B1 5A
0070 | E4 78 B2 3A 08 A8 D4 99 EB 75 A9 B8 FC 63 0F 2D
0080 | 59 1C 41 78 3B 8A E0 21 B3 0F E5 70 13 B3 11 CE
0090 | 77 6E 6D A9 95 DE 02 A6 C6 FC 82 82 3D BC 81 F3
00A0 | 11 9B 95 3B 95 F2 0A F5 05 24 2C D6 35 17 65 0D
00B0 | 0C 03 B7 22 23 53 11 72 AC 02 CA 50 FD 0E 25 26
00C0 | D2 4D 91 1B E9 AF DC D2 5A 1C 5F 18 53 87 96 B5
00D0 | 1A FD 2F CE 0C EA B4 E6 81 54 47 17 44 41 8B 3D
00E0 | 76 F8 04 7D C8 1E 66 4E 47 5B 81 31 F1 33 F9 81
00F0 | 7B 2E 0D 38 AF 1A EB 4D 60 FA F4 AB E0 91 A4 A2
0100 | 82 B3 D8 D1 38 76 57 95 81 0C 08 68 1F 68 02 50
0110 | 90 0D 75 07 B4 3D 14 ED A9 94 49 D1 A7 DD 6B FB
0120 | 69 BC E4 83 99 D3 D5 2E 50 59 26 9E 37 82 B9 51</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 = BA0D89B5FE7651D628ED4710EE66DEC7F289F2D3A871EC905440E94F36CAAE3C16AE24E
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>FE7651D628ED4710EE66DEC7F289F2D3</code></td>
<td><code>93102CAEBB919E9C27B000AA59D83FD7</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>A871EC905440E94F36CAAE3C16AE24E1</code></td>
<td><code>8D2B592A7F3ED10F45D406FD359FD1D0</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>g_b</td>
<td>36, 260</td>
<td><code>FE00010061F9C703D8BDB0F8C7F74ACD</code> <code>60E59C65B013F2933B888DA35D41195A</code> <code>13A548C27800FDCFEAEA1705DF8FE846</code> <code>734A74338A0CF0AAE517ABD824DFFEF0</code> <code>560C8F985375088B5E5DEB8F90D05863</code> <code>B8ACD0F5B53E625414D28E91AB1014A1</code> <code>EAA54D1465438ABCB19C088175164368</code> <code>9E674FBE3889D260455DC419A28FBB93</code> <code>499DBBC30C9F33CB2F1C35942198D66E</code> <code>89351C136762783773276E1C531F6CA9</code> <code>7AA65CA92E4DD3106D62B277253A8594</code> <code>E838FF3BC858D7922D505ED1FA141A7F</code> <code>5339E33A59EAB18FA971FEE834D927D7</code> <code>45580341C9ADF3467CB14DE6B7E54DE0</code> <code>3402A86CCDD93D5E65A06B09C702F36E</code> <code>565116789F0D4E366F8E21FD992FFB63</code><br> <code>C6BBA32B</code></td>
<td><code>FE000100C1781601FF80F73A9C5446B9</code> <code>646E0592D84D80ADB8983E57C871E138</code> <code>6BCCEAFDC784FA30CE9430454CB6E5A2</code> <code>AB396F39E0EEC41B01B256391BAA2C52</code> <code>BD0EB15AE478B23A08A8D499EB75A9B8</code> <code>FC630F2D591C41783B8AE021B30FE570</code> <code>13B311CE776E6DA995DE02A6C6FC8282</code> <code>3DBC81F3119B953B95F20AF505242CD6</code> <code>3517650D0C03B72223531172AC02CA50</code> <code>FD0E2526D24D911BE9AFDCD25A1C5F18</code> <code>538796B51AFD2FCE0CEAB4E681544717</code> <code>44418B3D76F8047DC81E664E475B8131</code> <code>F133F9817B2E0D38AF1AEB4D60FAF4AB</code> <code>E091A4A282B3D8D138765795810C0868</code> <code>1F680250900D7507B43D14EDA99449D1</code> <code>A7DD6BFB69BCE48399D3D52E5059269E</code><br> <code>3782B951</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 = BA0D89B5FE7651D628ED4710EE66DEC7F289F2D3A871EC905440E94F36CAAE3C16AE24E
<!-- 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 = 54B64366FE7651D628ED4710EE66DEC7F289F2D3A871EC905440E94F36CAAE3C16AE24E10000000000000000FE00010061F9C703D8BDB0F8C7F74ACD60E59C65B013F2933B888DA35D41195A13A548C27800FDCFEAEA1705DF8FE846734A74338A0CF0AAE517ABD824DFFEF0560C8F985375088B5E5DEB8F90D05863B8ACD0F5B53E625414D28E91AB1014A1EAA54D1465438ABCB19C0881751643689E674FBE3889D260455DC419A28FBB93499DBBC30C9F33CB2F1C35942198D66E89351C136762783773276E1C531F6CA97AA65CA92E4DD3106D62B277253A8594E838FF3BC858D7922D505ED1FA141A7F5339E33A59EAB18FA971FEE834D927D745580341C9ADF3467CB14DE6B7E54DE03402A86CCDD93D5E65A06B09C702F36E565116789F0D4E366F8E21FD992FFB63C6BBA32B
padding = 320D2D4A2E5B51C92719E3AD
tmp_aes_key = D643DDC0A2EF8831729DB7D01C356F174CE09C6C8C26008E1A16BD197F89579A
tmp_aes_iv = 5136F208E6F269F4963A2965142188C736DBB06227671DFBAB563A056956FEC1</code></pre>
<pre><code>data = 54B6436693102CAEBB919E9C27B000AA59D83FD78D2B592A7F3ED10F45D406FD359FD1D00000000000000000FE000100C1781601FF80F73A9C5446B9646E0592D84D80ADB8983E57C871E1386BCCEAFDC784FA30CE9430454CB6E5A2AB396F39E0EEC41B01B256391BAA2C52BD0EB15AE478B23A08A8D499EB75A9B8FC630F2D591C41783B8AE021B30FE57013B311CE776E6DA995DE02A6C6FC82823DBC81F3119B953B95F20AF505242CD63517650D0C03B72223531172AC02CA50FD0E2526D24D911BE9AFDCD25A1C5F18538796B51AFD2FCE0CEAB4E68154471744418B3D76F8047DC81E664E475B8131F133F9817B2E0D38AF1AEB4D60FAF4ABE091A4A282B3D8D138765795810C08681F680250900D7507B43D14EDA99449D1A7DD6BFB69BCE48399D3D52E5059269E3782B951
padding = 5407123B9B60C50933258AB3
tmp_aes_key = 50D5A9339BAD43D2C764AB7335AED393F367BFE6C5D8EB4518468F7478DFA7DF
tmp_aes_iv = 056F5C6B4E865E1617D6D5FFA603BD40556F13DF5839A806D036908F095D4535</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 = 3404452FC25D9F806B4D8ED3FA3D410A031315318896713D798C32F19F95714728522AA4A0D2E86AC2F107E09E4D238E2BDDB26F99B5E5D18B8B5B7FF0E9C93F8D830430F458EA441EBEF3FD69C7A60F29E21F96D2703D1B94AA469C7BE2278ECF37C01DC715FE6679D929C09EF433AEACB9CE5B74E55085F35EC48AB6FCB3DFA3210DEA29F8079CA9C27791019AAD20B7D10FD7C47F21EBE7123DE1F712C0BAE5F1EBFCA4D7863523B8870FDD1C3EC48344ED223684444C0FF0542487F3F4B35FB7015C384D560A3A5E249586283DCA8C3C7702019ADD46094CEC9C8F3BB233B6437252B27657CD9EBA7D675CADB9CD6E18C2B969E7FB78F6042C87AB6108E76043503CC7A785C521EA86EAE6F790BA87B1103FBB00C6E50090E2F0ECBC5118E91E7A8849E320B3132CB65AA6A4F11067376DA01879D8CEDEB9B10783A212798E2A32435018F527795CB34FC5FA2FB9</code></pre>
<pre><code>encrypted_data = ABC1E578AE5AE4F70E9B27E977BAA9B0D334AA37FD8688695CAEC3811EB7F6229FCD16F5BD9936E69A9FF77BBD2EEEE5FBC65F64C1AF6796D5E9D7B45BCFE95D79AD5BA3445B5BC1887EE4A84867D7C8E08142566414EB1842D3EC540B8E1F039F712A9CD699F046DF0438C4ECC6F2169CF229CDA4EA7F71A36FF8736828A9298FC8737A9B1CE42F237FFCA23DCA1E350D09466994AA879EDFC523405C4CB0BB8551C02CC69EB3D2D0F9FE614872C83602AFF3E9BD7EBFB92B6E53472FB7803A79AF626BABC75D96D24D5B94D7D117BE613BB8DDC22318F04BB88B1D638E95D21346C7EB6F2AA058AF3F183FE490772E16063D34987418DEE2BD5BE47CB4527F50716ACE6CE3EC0276680A5D29C98118A852D99BA06D16C1A68BA22D02C95C7F41ACEE1F0BAFABC6E8C0CF558DFA5AFC3AFEC2B9C91109FB182CB553D9EB4EE5BA7F6E29202122AC78C0E0040B77FC12</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 B8 3F 07 00 E9 2E 7B 66
0010 | 78 01 00 00 1F 5F 04 F5 FE 76 51 D6 28 ED 47 10
0020 | EE 66 DE C7 F2 89 F2 D3 A8 71 EC 90 54 40 E9 4F
0030 | 36 CA AE 3C 16 AE 24 E1 FE 50 01 00 34 04 45 2F
0040 | C2 5D 9F 80 6B 4D 8E D3 FA 3D 41 0A 03 13 15 31
0050 | 88 96 71 3D 79 8C 32 F1 9F 95 71 47 28 52 2A A4
0060 | A0 D2 E8 6A C2 F1 07 E0 9E 4D 23 8E 2B DD B2 6F
0070 | 99 B5 E5 D1 8B 8B 5B 7F F0 E9 C9 3F 8D 83 04 30
0080 | F4 58 EA 44 1E BE F3 FD 69 C7 A6 0F 29 E2 1F 96
0090 | D2 70 3D 1B 94 AA 46 9C 7B E2 27 8E CF 37 C0 1D
00A0 | C7 15 FE 66 79 D9 29 C0 9E F4 33 AE AC B9 CE 5B
00B0 | 74 E5 50 85 F3 5E C4 8A B6 FC B3 DF A3 21 0D EA
00C0 | 29 F8 07 9C A9 C2 77 91 01 9A AD 20 B7 D1 0F D7
00D0 | C4 7F 21 EB E7 12 3D E1 F7 12 C0 BA E5 F1 EB FC
00E0 | A4 D7 86 35 23 B8 87 0F DD 1C 3E C4 83 44 ED 22
00F0 | 36 84 44 4C 0F F0 54 24 87 F3 F4 B3 5F B7 01 5C
0100 | 38 4D 56 0A 3A 5E 24 95 86 28 3D CA 8C 3C 77 02
0110 | 01 9A DD 46 09 4C EC 9C 8F 3B B2 33 B6 43 72 52
0120 | B2 76 57 CD 9E BA 7D 67 5C AD B9 CD 6E 18 C2 B9
0130 | 69 E7 FB 78 F6 04 2C 87 AB 61 08 E7 60 43 50 3C
0140 | C7 A7 85 C5 21 EA 86 EA E6 F7 90 BA 87 B1 10 3F
0150 | BB 00 C6 E5 00 90 E2 F0 EC BC 51 18 E9 1E 7A 88
0160 | 49 E3 20 B3 13 2C B6 5A A6 A4 F1 10 67 37 6D A0
0170 | 18 79 D8 CE DE B9 B1 07 83 A2 12 79 8E 2A 32 43
0180 | 50 18 F5 27 79 5C B3 4F C5 FA 2F B9</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 FC 2C 0F 00 9E 54 7C 66
0010 | 78 01 00 00 1F 5F 04 F5 93 10 2C AE BB 91 9E 9C
0020 | 27 B0 00 AA 59 D8 3F D7 8D 2B 59 2A 7F 3E D1 0F
0030 | 45 D4 06 FD 35 9F D1 D0 FE 50 01 00 AB C1 E5 78
0040 | AE 5A E4 F7 0E 9B 27 E9 77 BA A9 B0 D3 34 AA 37
0050 | FD 86 88 69 5C AE C3 81 1E B7 F6 22 9F CD 16 F5
0060 | BD 99 36 E6 9A 9F F7 7B BD 2E EE E5 FB C6 5F 64
0070 | C1 AF 67 96 D5 E9 D7 B4 5B CF E9 5D 79 AD 5B A3
0080 | 44 5B 5B C1 88 7E E4 A8 48 67 D7 C8 E0 81 42 56
0090 | 64 14 EB 18 42 D3 EC 54 0B 8E 1F 03 9F 71 2A 9C
00A0 | D6 99 F0 46 DF 04 38 C4 EC C6 F2 16 9C F2 29 CD
00B0 | A4 EA 7F 71 A3 6F F8 73 68 28 A9 29 8F C8 73 7A
00C0 | 9B 1C E4 2F 23 7F FC A2 3D CA 1E 35 0D 09 46 69
00D0 | 94 AA 87 9E DF C5 23 40 5C 4C B0 BB 85 51 C0 2C
00E0 | C6 9E B3 D2 D0 F9 FE 61 48 72 C8 36 02 AF F3 E9
00F0 | BD 7E BF B9 2B 6E 53 47 2F B7 80 3A 79 AF 62 6B
0100 | AB C7 5D 96 D2 4D 5B 94 D7 D1 17 BE 61 3B B8 DD
0110 | C2 23 18 F0 4B B8 8B 1D 63 8E 95 D2 13 46 C7 EB
0120 | 6F 2A A0 58 AF 3F 18 3F E4 90 77 2E 16 06 3D 34
0130 | 98 74 18 DE E2 BD 5B E4 7C B4 52 7F 50 71 6A CE
0140 | 6C E3 EC 02 76 68 0A 5D 29 C9 81 18 A8 52 D9 9B
0150 | A0 6D 16 C1 A6 8B A2 2D 02 C9 5C 7F 41 AC EE 1F
0160 | 0B AF AB C6 E8 C0 CF 55 8D FA 5A FC 3A FE C2 B9
0170 | C9 11 09 FB 18 2C B5 53 D9 EB 4E E5 BA 7F 6E 29
0180 | 20 21 22 AC 78 C0 E0 04 0B 77 FC 12</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>B83F0700E92E7B66</code></td>
<td><code>FC2C0F009E547C66</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>FE7651D628ED4710EE66DEC7F289F2D3</code></td>
<td><code>93102CAEBB919E9C27B000AA59D83FD7</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>A871EC905440E94F36CAAE3C16AE24E1</code></td>
<td><code>8D2B592A7F3ED10F45D406FD359FD1D0</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_data</td>
<td>56, 340</td>
<td><code>FE5001003404452FC25D9F806B4D8ED3</code> <code>FA3D410A031315318896713D798C32F1</code> <code>9F95714728522AA4A0D2E86AC2F107E0</code> <code>9E4D238E2BDDB26F99B5E5D18B8B5B7F</code> <code>F0E9C93F8D830430F458EA441EBEF3FD</code> <code>69C7A60F29E21F96D2703D1B94AA469C</code> <code>7BE2278ECF37C01DC715FE6679D929C0</code> <code>9EF433AEACB9CE5B74E55085F35EC48A</code> <code>B6FCB3DFA3210DEA29F8079CA9C27791</code> <code>019AAD20B7D10FD7C47F21EBE7123DE1</code> <code>F712C0BAE5F1EBFCA4D7863523B8870F</code> <code>DD1C3EC48344ED223684444C0FF05424</code> <code>87F3F4B35FB7015C384D560A3A5E2495</code> <code>86283DCA8C3C7702019ADD46094CEC9C</code> <code>8F3BB233B6437252B27657CD9EBA7D67</code> <code>5CADB9CD6E18C2B969E7FB78F6042C87</code> <code>AB6108E76043503CC7A785C521EA86EA</code> <code>E6F790BA87B1103FBB00C6E50090E2F0</code> <code>ECBC5118E91E7A8849E320B3132CB65A</code> <code>A6A4F11067376DA01879D8CEDEB9B107</code> <code>83A212798E2A32435018F527795CB34F</code><br> <code>C5FA2FB9</code></td>
<td><code>FE500100ABC1E578AE5AE4F70E9B27E9</code> <code>77BAA9B0D334AA37FD8688695CAEC381</code> <code>1EB7F6229FCD16F5BD9936E69A9FF77B</code> <code>BD2EEEE5FBC65F64C1AF6796D5E9D7B4</code> <code>5BCFE95D79AD5BA3445B5BC1887EE4A8</code> <code>4867D7C8E08142566414EB1842D3EC54</code> <code>0B8E1F039F712A9CD699F046DF0438C4</code> <code>ECC6F2169CF229CDA4EA7F71A36FF873</code> <code>6828A9298FC8737A9B1CE42F237FFCA2</code> <code>3DCA1E350D09466994AA879EDFC52340</code> <code>5C4CB0BB8551C02CC69EB3D2D0F9FE61</code> <code>4872C83602AFF3E9BD7EBFB92B6E5347</code> <code>2FB7803A79AF626BABC75D96D24D5B94</code> <code>D7D117BE613BB8DDC22318F04BB88B1D</code> <code>638E95D21346C7EB6F2AA058AF3F183F</code> <code>E490772E16063D34987418DEE2BD5BE4</code> <code>7CB4527F50716ACE6CE3EC0276680A5D</code> <code>29C98118A852D99BA06D16C1A68BA22D</code> <code>02C95C7F41ACEE1F0BAFABC6E8C0CF55</code> <code>8DFA5AFC3AFEC2B9C91109FB182CB553</code> <code>D9EB4EE5BA7F6E29202122AC78C0E004</code><br> <code>0B77FC12</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 = AD531187B49B35724A4CDEA28360522C24D572DE3DBA4B701B79E6486E10F3165BEBCB5BA36369FFD390E79C7AE018936CDCD44486F195DEF8A920CC24C6B8B94D615066E86A5F565A1554C292ABC403BB0184BBC66649FC1BA2F2394621C036B8ECA39496595CCEDBAF61FFC0E324167720FD0F597E28C43026089EC2B8BCDC50D20873AC30FD60F6A9AD59D8600E4BE4C1EA6F8B23625F45F16B780DFDD7C717A87E8732D1C2EF1A2698BC3FBEE569E09EB36B0E3797CCE231E084CCE3C4B815AF1BC463D84200104A514E4E29C809B59954A94AD3A54DECF7F2CB09B2D7AE01C7AB73DE9FEB8784CED6A81E744F7F7A77064411AF4574F1B717AF60CD4552</code></pre>
<pre><code>auth_key = 1835C5216BBC405490789296866B99CDC7C1540970D809B10F7F40E137317B99827E8A6DF5B87897AF5E05D1460AA478C0DA3269B01E652697D9983390B6BB3B0A67CEB0611F04B3EA4344CA00647695E7BD1DD73F5BAA2C8CB35ED738A8455136E0A9C9EC16E588806CD09740A0ED5DC639BA4D2968AB521A4D14EBD9B922036AAD15C080D54E3579E2548CB657F5B1F47EC6C30B162F833E089F510C712C687CA7BC951AF0D5764831506AF63D73B319E9BDD1DD8BA59D7CFC0EAC0378C3D4BB9A733206457704908B8843FECC11A2BFE9DA258834091182C9627AB80D40863F399863B8AF627B5E6B1C1C0B05C57EBDFD63BDA710A4626DFDB62A28D951B0</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 BC B7 71 EA 2E 7B 66
0010 | 90 00 00 00 34 F7 CB 3B FE 76 51 D6 28 ED 47 10
0020 | EE 66 DE C7 F2 89 F2 D3 A8 71 EC 90 54 40 E9 4F
0030 | 36 CA AE 3C 16 AE 24 E1 BA FA BD FA 3C 62 E4 2A
0040 | 9E 9D 11 78 6F B9 72 9F</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 34 A9 38 9F 54 7C 66
0010 | AC 00 00 00 34 F7 CB 3B 93 10 2C AE BB 91 9E 9C
0020 | 27 B0 00 AA 59 D8 3F D7 8D 2B 59 2A 7F 3E D1 0F
0030 | 45 D4 06 FD 35 9F D1 D0 64 05 E8 75 E3 D3 40 7C
0040 | C5 91 75 1C CF AA 46 E2</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>01BCB771EA2E7B66</code></td>
<td><code>0134A9389F547C66</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>90000000</code> (144 in decimal)</td>
<td><code>AC000000</code> (172 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>FE7651D628ED4710EE66DEC7F289F2D3</code></td>
<td><code>93102CAEBB919E9C27B000AA59D83FD7</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>A871EC905440E94F36CAAE3C16AE24E1</code></td>
<td><code>8D2B592A7F3ED10F45D406FD359FD1D0</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce_hash1</td>
<td>56, 16</td>
<td><code>BAFABDFA3C62E42A9E9D11786FB9729F</code></td>
<td><code>6405E875E3D3407CC591751CCFAA46E2</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>