Update content of files

This commit is contained in:
GitHub Action 2024-07-31 10:07:32 +00:00
parent 5b7152c5fe
commit c17ac51fcd
2 changed files with 207 additions and 207 deletions

View file

@ -64,7 +64,7 @@ The GamingCommunication and bot mini apps libraries by default will use <code>'*
<h4><a class="anchor" href="#web-app-close" id="web-app-close" name="web-app-close"><i class="anchor-icon"></i></a><code>web_app_close</code></h4>
<p>No event payload, OR a JSON object with the following fields (which should be properly validated by the client).</p>
<ul>
<li><code>return_back</code> - If true, the client should return to the previous activity. (boolean, optional)</li>
<li><code>return_back</code> - If true, if the web app was opened through a <a href="/api/links">deep link</a> in another app (i.e. not through a deep link in a Telegram client), the Telegram client should return to the app that opened the link, not to the main page of the Telegram client. (boolean, optional)</li>
</ul>
<p>Emitted by <a href="/api/bots/webapps">bot mini apps</a> when the mini app webview should be closed.</p>
<h4><a class="anchor" href="#web-app-open-popup" id="web-app-open-popup" name="web-app-open-popup"><i class="anchor-icon"></i></a><code>web_app_open_popup</code></h4>

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 F9 06 00 F1 20 A9 66
0010 | 14 00 00 00 F1 8E 7E BE D9 43 A3 CF F0 5D DE D8
0020 | 4C BD B5 C9 73 00 93 EE</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 E4 2A 05 00 6A 21 A9 66
0010 | 14 00 00 00 F1 8E 7E BE 12 C3 06 4D DC AA 11 9F
0020 | 34 EB 28 26 C7 82 24 D9</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>D8F90600F120A966</code></td>
<td><code>E42A05006A21A966</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>D943A3CFF05DDED84CBDB5C9730093EE</code></td>
<td><code>12C3064DDCAA119F34EB2826C78224D9</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 C4 B9 0B F2 20 A9 66
0010 | 88 00 00 00 63 24 16 05 D9 43 A3 CF F0 5D DE D8
0020 | 4C BD B5 C9 73 00 93 EE DB A2 9F C9 E2 11 06 92
0030 | 56 1C 3C 74 94 8F E1 DE 08 16 1E 19 75 2C 86 19
0040 | BB 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 10 B0 60 6A 21 A9 66
0010 | A0 00 00 00 63 24 16 05 12 C3 06 4D DC AA 11 9F
0020 | 34 EB 28 26 C7 82 24 D9 BB EB 55 8F 3B 71 35 7F
0030 | 86 21 B7 12 51 B2 70 D2 08 23 AB 87 90 54 2E F8
0040 | 51 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>01C4B90BF220A966</code></td>
<td><code>0110B0606A21A966</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>88000000</code> (136 in decimal)</td>
<td><code>A0000000</code> (160 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -150,19 +150,19 @@
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>D943A3CFF05DDED84CBDB5C9730093EE</code></td>
<td><code>12C3064DDCAA119F34EB2826C78224D9</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>DBA29FC9E2110692561C3C74948FE1DE</code></td>
<td><code>BBEB558F3B71357F8621B71251B270D2</code></td>
<td>Server-generated random number</td>
</tr>
<tr>
<td>pq</td>
<td>56, 12</td>
<td><code>08161E19752C8619BB000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1593739309184588219</td>
<td><code>0823AB8790542EF851000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2570297066302404689</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 = 1593739309184588219</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>1593739309184588219 = 1129690483 * 1410775193</code></p>
<pre><code>p = 1129690483
q = 1410775193</code></pre>
<pre><code>pq = 2570297066302404689</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>2570297066302404689 = 1549256099 * 1659052411</code></p>
<pre><code>p = 1549256099
q = 1659052411</code></pre>
<!-- end pq -->
<h4><a class="anchor" href="#presenting-proof-of-work-server-authentication" id="presenting-proof-of-work-server-authentication" name="presenting-proof-of-work-server-authentication"><i class="anchor-icon"></i></a>Presenting proof of work; Server authentication</h4>
<h5><a class="anchor" href="#4-encrypted-data-payload-generation" id="4-encrypted-data-payload-generation" name="4-encrypted-data-payload-generation"><i class="anchor-icon"></i></a>4) <code>encrypted_data</code> payload generation</h5>
<p>First of all, generate an <code>encrypted_data</code> payload as follows:</p>
<!-- start p_q_inner_data_dc -->
<p>Generated payload (excluding transport headers/trailers):</p>
<pre><code>0000 | 95 5F F5 A9 08 16 1E 19 75 2C 86 19 BB 00 00 00
0010 | 04 43 55 B5 73 00 00 00 04 54 16 B8 99 00 00 00
0020 | D9 43 A3 CF F0 5D DE D8 4C BD B5 C9 73 00 93 EE
0030 | DB A2 9F C9 E2 11 06 92 56 1C 3C 74 94 8F E1 DE
0040 | 46 66 D8 D8 4F EB E4 2B 37 AA CD C4 C3 75 21 78
0050 | 00 E5 E6 61 A2 7A 63 6C 0E 6A 20 6D 03 52 1B BC
<pre><code>0000 | 95 5F F5 A9 08 23 AB 87 90 54 2E F8 51 00 00 00
0010 | 04 5C 57 C5 A3 00 00 00 04 62 E3 21 7B 00 00 00
0020 | 12 C3 06 4D DC AA 11 9F 34 EB 28 26 C7 82 24 D9
0030 | BB EB 55 8F 3B 71 35 7F 86 21 B7 12 51 B2 70 D2
0040 | C7 C0 98 2D 64 05 1B B3 4A 9E 71 F3 AD 2E E5 B5
0050 | E0 9F AB B7 7D 2A 41 FF FB B6 D3 58 27 85 00 78
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 = 1410775193</code></pre>
<tr>
<td>pq</td>
<td>4, 12</td>
<td><code>08161E19752C8619BB000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1593739309184588219</td>
<td><code>0823AB8790542EF851000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2570297066302404689</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>044355B573000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1129690483</td>
<td><code>045C57C5A3000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1549256099</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>045416B899000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1410775193</td>
<td><code>0462E3217B000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1659052411</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>D943A3CFF05DDED84CBDB5C9730093EE</code></td>
<td><code>12C3064DDCAA119F34EB2826C78224D9</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>48, 16</td>
<td><code>DBA29FC9E2110692561C3C74948FE1DE</code></td>
<td><code>BBEB558F3B71357F8621B71251B270D2</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce</td>
<td>64, 32</td>
<td><code>4666D8D84FEBE42B37AACDC4C3752178</code> <code>00E5E661A27A636C0E6A206D03521BBC</code></td>
<td><code>C7C0982D64051BB34A9E71F3AD2EE5B5</code> <code>E09FABB77D2A41FFFBB6D35827850078</code></td>
<td>Client-generated random number</td>
</tr>
<tr>
@ -291,39 +291,39 @@ q = 1410775193</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 = 955FF5A908161E19752C8619BB000000044355B573000000045416B899000000D943A3CFF05DDED84CBDB5C9730093EEDBA29FC9E2110692561C3C74948FE1DE4666D8D84FEBE42B37AACDC4C375217800E5E661A27A636C0E6A206D03521BBC02000000
random_padding_bytes = 198E72F87D664F2C97FF68422E35D0D39EB0DD8BE6A89351F03E56965EAFD1B699B8B87591B1F6AFF9E97068279ADD9EAC7ED4080056CC347932E4F5B5D0EFAED2D21223A8197BE51B54092FA0E64032BA5C59F22BD2D4BF6FA2E6F4</code></pre>
<pre><code>data = 955FF5A90823AB8790542EF851000000045C57C5A30000000462E3217B00000012C3064DDCAA119F34EB2826C78224D9BBEB558F3B71357F8621B71251B270D2C7C0982D64051BB34A9E71F3AD2EE5B5E09FABB77D2A41FFFBB6D3582785007802000000
random_padding_bytes = ACD454656EAD6AB342120E881FCE70D5F4B7565EDDA77E028B1D218814070360CB514E5C6B84618331C84DE0205961470A7C6995C672BC8D5F38B2C6BEB22CB094A7F02ED3A137F6ED657F8465B346A42EC333896B61150C8C4874A3</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 = C2332A84B37FB811AF9CA4C116FCFBE6CBEC858DBFAF84C8A6669C1E61F152294037B625BD1A06C1FF6BA810EEA3BDB7C64125040325E0D60D0069AB884F897953926C2772DE423637C883ACF410AF8A7D76DA497ECA305DC996833EC9862E40F57C83A71ED055F15BD36AD5E82702B6350D493C6AA61A64279A29873D66F13476CBA45FCD5DFACAB76367E30C75DF99B0B3E2BDC7CBD8F18E3356821746FB9300FFA3A9AC744EA104EEF0ACF83C3691576A1A1B4FAE6EFDD07154249062D47A246D703A225EF47C2B483D20341B9960A3193D86EF433674A9663C910B24DCBC425ECF4E07E07B57D060944E4627C65B59A086E08AB635A86AB8D95CF5A6B8E7</code></pre>
<pre><code>encrypted_data = 2BB791D49E5670EBE5789CF1F352DC19444359CFFFB31B26C2123C12CA3AE4C7E3E9992ACAFB38B3D869D3C219105BDF83278D42E0D32B3748E8046983F6059FEE588A950E7A9DC5264CE58A354536768013E87EA92F41A8EAF505F17F29149D6484509BEFB74407EFBE9412F7B8CB337AC916ACD6AC79E0BD719E1D15D4939440F6DC6C0C391BD66ED9E4C61F346CAB66248D1A07E67874700E5FCAA31D9DF8674B32D012FE6DF23EBD7EC57AEED0F74238812536B87D92DD4AB7613309DCBD642157D1D5E0D2E2A34D7CA3D8873804F8EDE1D800E0205231288552630D94E00D17436B94370ABE89995A3713101AE649A4C393A888F5B9CBACF0EB8917DB4D</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 C8 B5 0A 00 F2 20 A9 66
0010 | 40 01 00 00 BE E4 12 D7 D9 43 A3 CF F0 5D DE D8
0020 | 4C BD B5 C9 73 00 93 EE DB A2 9F C9 E2 11 06 92
0030 | 56 1C 3C 74 94 8F E1 DE 04 43 55 B5 73 00 00 00
0040 | 04 54 16 B8 99 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 C2 33 2A 84 B3 7F B8 11 AF 9C A4 C1
0060 | 16 FC FB E6 CB EC 85 8D BF AF 84 C8 A6 66 9C 1E
0070 | 61 F1 52 29 40 37 B6 25 BD 1A 06 C1 FF 6B A8 10
0080 | EE A3 BD B7 C6 41 25 04 03 25 E0 D6 0D 00 69 AB
0090 | 88 4F 89 79 53 92 6C 27 72 DE 42 36 37 C8 83 AC
00A0 | F4 10 AF 8A 7D 76 DA 49 7E CA 30 5D C9 96 83 3E
00B0 | C9 86 2E 40 F5 7C 83 A7 1E D0 55 F1 5B D3 6A D5
00C0 | E8 27 02 B6 35 0D 49 3C 6A A6 1A 64 27 9A 29 87
00D0 | 3D 66 F1 34 76 CB A4 5F CD 5D FA CA B7 63 67 E3
00E0 | 0C 75 DF 99 B0 B3 E2 BD C7 CB D8 F1 8E 33 56 82
00F0 | 17 46 FB 93 00 FF A3 A9 AC 74 4E A1 04 EE F0 AC
0100 | F8 3C 36 91 57 6A 1A 1B 4F AE 6E FD D0 71 54 24
0110 | 90 62 D4 7A 24 6D 70 3A 22 5E F4 7C 2B 48 3D 20
0120 | 34 1B 99 60 A3 19 3D 86 EF 43 36 74 A9 66 3C 91
0130 | 0B 24 DC BC 42 5E CF 4E 07 E0 7B 57 D0 60 94 4E
0140 | 46 27 C6 5B 59 A0 86 E0 8A B6 35 A8 6A B8 D9 5C
0150 | F5 A6 B8 E7</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 E8 2A 05 00 6A 21 A9 66
0010 | 40 01 00 00 BE E4 12 D7 12 C3 06 4D DC AA 11 9F
0020 | 34 EB 28 26 C7 82 24 D9 BB EB 55 8F 3B 71 35 7F
0030 | 86 21 B7 12 51 B2 70 D2 04 5C 57 C5 A3 00 00 00
0040 | 04 62 E3 21 7B 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 2B B7 91 D4 9E 56 70 EB E5 78 9C F1
0060 | F3 52 DC 19 44 43 59 CF FF B3 1B 26 C2 12 3C 12
0070 | CA 3A E4 C7 E3 E9 99 2A CA FB 38 B3 D8 69 D3 C2
0080 | 19 10 5B DF 83 27 8D 42 E0 D3 2B 37 48 E8 04 69
0090 | 83 F6 05 9F EE 58 8A 95 0E 7A 9D C5 26 4C E5 8A
00A0 | 35 45 36 76 80 13 E8 7E A9 2F 41 A8 EA F5 05 F1
00B0 | 7F 29 14 9D 64 84 50 9B EF B7 44 07 EF BE 94 12
00C0 | F7 B8 CB 33 7A C9 16 AC D6 AC 79 E0 BD 71 9E 1D
00D0 | 15 D4 93 94 40 F6 DC 6C 0C 39 1B D6 6E D9 E4 C6
00E0 | 1F 34 6C AB 66 24 8D 1A 07 E6 78 74 70 0E 5F CA
00F0 | A3 1D 9D F8 67 4B 32 D0 12 FE 6D F2 3E BD 7E C5
0100 | 7A EE D0 F7 42 38 81 25 36 B8 7D 92 DD 4A B7 61
0110 | 33 09 DC BD 64 21 57 D1 D5 E0 D2 E2 A3 4D 7C A3
0120 | D8 87 38 04 F8 ED E1 D8 00 E0 20 52 31 28 85 52
0130 | 63 0D 94 E0 0D 17 43 6B 94 37 0A BE 89 99 5A 37
0140 | 13 10 1A E6 49 A4 C3 93 A8 88 F5 B9 CB AC F0 EB
0150 | 89 17 DB 4D</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 = 198E72F87D664F2C97FF68422E35D0D39EB0DD8BE6A89351F03E56965
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>C8B50A00F220A966</code></td>
<td><code>E82A05006A21A966</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 = 198E72F87D664F2C97FF68422E35D0D39EB0DD8BE6A89351F03E56965
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>D943A3CFF05DDED84CBDB5C9730093EE</code></td>
<td><code>12C3064DDCAA119F34EB2826C78224D9</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>DBA29FC9E2110692561C3C74948FE1DE</code></td>
<td><code>BBEB558F3B71357F8621B71251B270D2</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>p</td>
<td>56, 8</td>
<td><code>044355B573000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1129690483</td>
<td><code>045C57C5A3000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1549256099</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>045416B899000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1410775193</td>
<td><code>0462E3217B000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1659052411</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 = 198E72F87D664F2C97FF68422E35D0D39EB0DD8BE6A89351F03E56965
<tr>
<td>encrypted_data</td>
<td>80, 260</td>
<td><code>FE000100C2332A84B37FB811AF9CA4C1</code> <code>16FCFBE6CBEC858DBFAF84C8A6669C1E</code> <code>61F152294037B625BD1A06C1FF6BA810</code> <code>EEA3BDB7C64125040325E0D60D0069AB</code> <code>884F897953926C2772DE423637C883AC</code> <code>F410AF8A7D76DA497ECA305DC996833E</code> <code>C9862E40F57C83A71ED055F15BD36AD5</code> <code>E82702B6350D493C6AA61A64279A2987</code> <code>3D66F13476CBA45FCD5DFACAB76367E3</code> <code>0C75DF99B0B3E2BDC7CBD8F18E335682</code> <code>1746FB9300FFA3A9AC744EA104EEF0AC</code> <code>F83C3691576A1A1B4FAE6EFDD0715424</code> <code>9062D47A246D703A225EF47C2B483D20</code> <code>341B9960A3193D86EF433674A9663C91</code> <code>0B24DCBC425ECF4E07E07B57D060944E</code> <code>4627C65B59A086E08AB635A86AB8D95C</code><br> <code>F5A6B8E7</code></td>
<td><code>FE0001002BB791D49E5670EBE5789CF1</code> <code>F352DC19444359CFFFB31B26C2123C12</code> <code>CA3AE4C7E3E9992ACAFB38B3D869D3C2</code> <code>19105BDF83278D42E0D32B3748E80469</code> <code>83F6059FEE588A950E7A9DC5264CE58A</code> <code>354536768013E87EA92F41A8EAF505F1</code> <code>7F29149D6484509BEFB74407EFBE9412</code> <code>F7B8CB337AC916ACD6AC79E0BD719E1D</code> <code>15D4939440F6DC6C0C391BD66ED9E4C6</code> <code>1F346CAB66248D1A07E67874700E5FCA</code> <code>A31D9DF8674B32D012FE6DF23EBD7EC5</code> <code>7AEED0F74238812536B87D92DD4AB761</code> <code>3309DCBD642157D1D5E0D2E2A34D7CA3</code> <code>D8873804F8EDE1D800E0205231288552</code> <code>630D94E00D17436B94370ABE89995A37</code> <code>13101AE649A4C393A888F5B9CBACF0EB</code><br> <code>8917DB4D</code></td>
<td>Value generated above</td>
</tr>
</tbody>
@ -402,47 +402,47 @@ random_padding_bytes = 198E72F87D664F2C97FF68422E35D0D39EB0DD8BE6A89351F03E56965
<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 90 20 EF F2 20 A9 66
0010 | 90 02 00 00 5C 07 E8 D0 D9 43 A3 CF F0 5D DE D8
0020 | 4C BD B5 C9 73 00 93 EE DB A2 9F C9 E2 11 06 92
0030 | 56 1C 3C 74 94 8F E1 DE FE 50 02 00 CC 1E 6E BC
0040 | 1B F2 E8 A2 2E 39 7E 40 95 66 35 06 FC 09 C7 21
0050 | 29 12 A6 F9 A2 37 85 CE FF 97 71 9D 5A 1A B5 CF
0060 | 19 13 6D C4 8C D1 4A 30 93 F8 3C 44 87 F7 23 25
0070 | 31 92 07 DB 5E 14 72 B9 36 B3 B1 92 9A F4 2B D2
0080 | 9F A1 FD 4C 90 73 23 C9 3B 36 5F 0A 0A 81 41 4F
0090 | C1 FB BD 12 49 BF 60 8C FD CC 78 6D 52 BD FD D7
00A0 | B3 3E 53 8E EA 34 92 2E FA D1 E7 FA E9 1F 49 50
00B0 | FA 28 DA 16 10 AD F2 48 E9 2E 60 8E 0A 31 9F CC
00C0 | 77 62 72 5E D1 65 3C 06 67 58 20 C3 D8 04 B7 60
00D0 | 1B 97 0D 8B BF 8D 3D FA AC 58 7B 5C D8 F7 AB 23
00E0 | D1 9D 11 55 6C 19 39 F2 7C 55 08 87 36 01 B4 42
00F0 | 1D AB 53 44 19 79 7B 57 82 A6 B0 D4 72 8D 46 C5
0100 | FD 38 A7 A2 BE 02 26 A2 58 44 F3 0A 4D 87 80 FA
0110 | 83 7A F3 74 15 4C F9 F3 3E 70 18 83 7E DD 5D 16
0120 | 30 3B 87 67 D4 A7 6D 57 E6 1F 08 E0 EE 02 AA 29
0130 | C7 3D 73 F1 AF B4 09 50 65 F6 1E 74 42 9A D2 23
0140 | DD 08 E0 42 12 1E 06 2C E8 52 25 F1 95 BC 8C 65
0150 | 50 B2 01 B7 55 55 D6 8B AF 71 D4 4A 49 51 67 F9
0160 | 47 A4 89 37 19 8D 87 F7 F6 2B 2F A2 95 A3 78 43
0170 | 9A 8B 82 A5 87 EC C8 50 78 53 55 4B 0C 53 87 2C
0180 | 78 01 91 00 75 DE DE FD AF 13 4E 6F D4 D4 12 52
0190 | A7 F6 08 99 9F A7 7E E9 B0 B7 FB EF 3B 15 BF 3C
01A0 | 43 CE 57 AA 05 A2 63 42 D5 63 AF DC D1 E4 01 FA
01B0 | F9 83 98 C2 D2 12 E4 E5 07 96 7E E0 FA 68 FA B5
01C0 | AD 25 68 1B 89 F5 6F 76 4E 98 D3 44 AD 2D 84 CF
01D0 | 42 38 43 B1 A3 9B 7A A9 0F 52 DA 7E 2A 7D 74 88
01E0 | AB 50 28 19 00 EC 61 18 60 96 76 44 2B 90 B6 33
01F0 | D4 9D C8 FD 6E DE 16 61 5B CD 0F A1 FE DC 47 AC
0200 | AE 22 92 7E 21 9C 4D 1A BC 21 3E 20 00 5A B8 9F
0210 | 35 58 A0 43 76 82 6E DD 8F 49 A9 0A FA 66 A0 AA
0220 | 99 66 C4 DA 74 B9 4B 5E 7F DB 10 DD D2 CB E2 8D
0230 | 5D 4F 7E 74 EC 5E 8B 14 52 6A 7B 44 74 5E 5D 75
0240 | E6 7D B2 CB 01 3C A4 F1 79 DA E0 B6 8F 64 1D 09
0250 | 7A 7C 1E 79 29 1E 8B 9C B2 85 7E 8B CD 5C 47 B6
0260 | A9 C9 25 4A DB 72 A0 AE DB FB CD E6 29 4A 3E 8F
0270 | FB 4C 42 EE BD 83 36 AE 9B 9E 7D F7 E5 22 5D E4
0280 | 9F 9D 84 82 6F DA A5 B2 A9 35 D4 8A</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 A0 3A 19 6B 21 A9 66
0010 | C0 02 00 00 5C 07 E8 D0 12 C3 06 4D DC AA 11 9F
0020 | 34 EB 28 26 C7 82 24 D9 BB EB 55 8F 3B 71 35 7F
0030 | 86 21 B7 12 51 B2 70 D2 FE 50 02 00 D2 99 17 ED
0040 | 5F F3 F8 F5 1E 7F 8A 47 C7 B2 5F B7 AA E6 9F 7B
0050 | E1 98 FB D3 FC 7A 6A 87 98 30 CE B4 2C 24 F0 39
0060 | C4 B6 96 CC 07 28 A1 8E 28 43 F7 E1 F7 F9 F8 6D
0070 | 46 49 9A BE 9F 05 0B F1 2D EC F4 CB 6E 07 5E CB
0080 | 6F 28 BC 76 9E 9E 23 D3 37 20 FB 3A EF 17 14 36
0090 | 52 1B 08 81 47 6B 91 F8 75 F8 BF D4 03 DE F5 B4
00A0 | 67 B9 BE E7 DA A4 F9 72 21 4C 34 BC 76 75 63 B5
00B0 | 37 9F 1D D4 97 0E 95 EC DA 9D 46 A9 1D CB 60 CE
00C0 | 26 31 97 88 1A F6 51 31 EF 01 35 0F 3E D2 C7 E3
00D0 | 16 BC 36 EE 00 7E CE 88 CF DD A7 DF C9 DA 94 B8
00E0 | 58 C7 63 5D 9A C3 F7 71 A5 9B DD D3 92 55 EB 72
00F0 | 3B 27 BA 90 75 49 0C E0 7F 0C D6 C7 34 82 F9 E1
0100 | C8 2C 9F 33 FA 33 4F 78 C7 71 91 D1 E8 2E BC 6A
0110 | 7A 1D C8 8C 9C C2 71 91 C0 B0 7A 6E 15 08 15 A5
0120 | 3E 7F 74 62 BF E4 D4 41 B6 3E AA EF D9 5D 3A D5
0130 | DE 0A BA E9 0C 6F DB CF B9 C5 6C 73 46 0C 97 46
0140 | D8 58 45 A3 11 41 F6 09 E1 64 6B C9 76 B2 C4 93
0150 | E7 E1 5E B5 77 40 71 70 2F 1C 6F D2 FB 2C 78 F7
0160 | 61 F1 2C F9 D5 5B F2 3E 6C A2 67 27 40 52 05 B3
0170 | 5E EF 50 64 7B 61 63 3F 03 91 64 F0 D0 6C 0A DD
0180 | 7B 88 47 E0 07 7B AA 2E 26 00 33 F2 20 19 3F EB
0190 | 93 F6 F0 30 13 E5 99 3F 15 F9 07 EC 0B AA 70 21
01A0 | E1 4E 7E 7D AF 3D 34 30 79 30 36 76 7D CD FE DB
01B0 | AC A4 27 0D D4 6D D4 5E 46 F8 6F D7 6D 35 C7 05
01C0 | F7 B9 3D 91 5B DE 0D 80 39 C3 75 59 71 A0 86 5E
01D0 | 27 E5 E7 36 72 D9 B7 28 4E 3B 8E E6 01 FA 35 81
01E0 | 7E F5 B3 64 52 46 4B 3C F4 85 86 2B F3 B5 8C E2
01F0 | DE 2D D3 E1 81 7E 40 C2 76 CA 5A 3A 11 0E 1A E3
0200 | 0A A2 85 D2 EF 5E F3 8C 3E 39 7F 38 5E 7B 2E A7
0210 | 5C 4B 62 42 2E E5 0E CF 87 23 EB 88 27 3A E9 12
0220 | 5B 70 E5 AB 1D 43 16 92 C9 2C 91 DD 44 EB 25 2B
0230 | ED 0E A3 22 22 C8 71 22 81 CA CF 2D F5 63 52 66
0240 | FD 58 3E 0C 12 27 64 DB CA AF 43 9E D5 35 22 C9
0250 | B8 25 3A 8C 12 A8 D9 35 EA 77 1D 5F A6 DB 42 6D
0260 | A6 AE 60 29 A2 B0 0A E4 F9 22 ED C7 5A D3 0E C6
0270 | 47 F4 AF BA 2E 69 56 EC 8B E8 30 08 04 74 E1 14
0280 | C2 7D 6A D5 22 49 DF 75 F9 55 37 CD</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 = 198E72F87D664F2C97FF68422E35D0D39EB0DD8BE6A89351F03E56965
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>019020EFF220A966</code></td>
<td><code>01A03A196B21A966</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>90020000</code> (656 in decimal)</td>
<td><code>C0020000</code> (704 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -482,19 +482,19 @@ random_padding_bytes = 198E72F87D664F2C97FF68422E35D0D39EB0DD8BE6A89351F03E56965
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>D943A3CFF05DDED84CBDB5C9730093EE</code></td>
<td><code>12C3064DDCAA119F34EB2826C78224D9</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>DBA29FC9E2110692561C3C74948FE1DE</code></td>
<td><code>BBEB558F3B71357F8621B71251B270D2</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_answer</td>
<td>56, 596</td>
<td><code>FE500200CC1E6EBC1BF2E8A22E397E40</code> <code>95663506FC09C7212912A6F9A23785CE</code> <code>FF97719D5A1AB5CF19136DC48CD14A30</code> <code>93F83C4487F72325319207DB5E1472B9</code> <code>36B3B1929AF42BD29FA1FD4C907323C9</code> <code>3B365F0A0A81414FC1FBBD1249BF608C</code> <code>FDCC786D52BDFDD7B33E538EEA34922E</code> <code>FAD1E7FAE91F4950FA28DA1610ADF248</code> <code>E92E608E0A319FCC7762725ED1653C06</code> <code>675820C3D804B7601B970D8BBF8D3DFA</code> <code>AC587B5CD8F7AB23D19D11556C1939F2</code> <code>7C5508873601B4421DAB534419797B57</code> <code>82A6B0D4728D46C5FD38A7A2BE0226A2</code> <code>5844F30A4D8780FA837AF374154CF9F3</code> <code>3E7018837EDD5D16303B8767D4A76D57</code> <code>E61F08E0EE02AA29C73D73F1AFB40950</code> <code>65F61E74429AD223DD08E042121E062C</code> <code>E85225F195BC8C6550B201B75555D68B</code> <code>AF71D44A495167F947A48937198D87F7</code> <code>F62B2FA295A378439A8B82A587ECC850</code> <code>7853554B0C53872C7801910075DEDEFD</code> <code>AF134E6FD4D41252A7F608999FA77EE9</code> <code>B0B7FBEF3B15BF3C43CE57AA05A26342</code> <code>D563AFDCD1E401FAF98398C2D212E4E5</code> <code>07967EE0FA68FAB5AD25681B89F56F76</code> <code>4E98D344AD2D84CF423843B1A39B7AA9</code> <code>0F52DA7E2A7D7488AB50281900EC6118</code> <code>609676442B90B633D49DC8FD6EDE1661</code> <code>5BCD0FA1FEDC47ACAE22927E219C4D1A</code> <code>BC213E20005AB89F3558A04376826EDD</code> <code>8F49A90AFA66A0AA9966C4DA74B94B5E</code> <code>7FDB10DDD2CBE28D5D4F7E74EC5E8B14</code> <code>526A7B44745E5D75E67DB2CB013CA4F1</code> <code>79DAE0B68F641D097A7C1E79291E8B9C</code> <code>B2857E8BCD5C47B6A9C9254ADB72A0AE</code> <code>DBFBCDE6294A3E8FFB4C42EEBD8336AE</code> <code>9B9E7DF7E5225DE49F9D84826FDAA5B2</code><br> <code>A935D48A</code></td>
<td><code>FE500200D29917ED5FF3F8F51E7F8A47</code> <code>C7B25FB7AAE69F7BE198FBD3FC7A6A87</code> <code>9830CEB42C24F039C4B696CC0728A18E</code> <code>2843F7E1F7F9F86D46499ABE9F050BF1</code> <code>2DECF4CB6E075ECB6F28BC769E9E23D3</code> <code>3720FB3AEF171436521B0881476B91F8</code> <code>75F8BFD403DEF5B467B9BEE7DAA4F972</code> <code>214C34BC767563B5379F1DD4970E95EC</code> <code>DA9D46A91DCB60CE263197881AF65131</code> <code>EF01350F3ED2C7E316BC36EE007ECE88</code> <code>CFDDA7DFC9DA94B858C7635D9AC3F771</code> <code>A59BDDD39255EB723B27BA9075490CE0</code> <code>7F0CD6C73482F9E1C82C9F33FA334F78</code> <code>C77191D1E82EBC6A7A1DC88C9CC27191</code> <code>C0B07A6E150815A53E7F7462BFE4D441</code> <code>B63EAAEFD95D3AD5DE0ABAE90C6FDBCF</code> <code>B9C56C73460C9746D85845A31141F609</code> <code>E1646BC976B2C493E7E15EB577407170</code> <code>2F1C6FD2FB2C78F761F12CF9D55BF23E</code> <code>6CA26727405205B35EEF50647B61633F</code> <code>039164F0D06C0ADD7B8847E0077BAA2E</code> <code>260033F220193FEB93F6F03013E5993F</code> <code>15F907EC0BAA7021E14E7E7DAF3D3430</code> <code>793036767DCDFEDBACA4270DD46DD45E</code> <code>46F86FD76D35C705F7B93D915BDE0D80</code> <code>39C3755971A0865E27E5E73672D9B728</code> <code>4E3B8EE601FA35817EF5B36452464B3C</code> <code>F485862BF3B58CE2DE2DD3E1817E40C2</code> <code>76CA5A3A110E1AE30AA285D2EF5EF38C</code> <code>3E397F385E7B2EA75C4B62422EE50ECF</code> <code>8723EB88273AE9125B70E5AB1D431692</code> <code>C92C91DD44EB252BED0EA32222C87122</code> <code>81CACF2DF5635266FD583E0C122764DB</code> <code>CAAF439ED53522C9B8253A8C12A8D935</code> <code>EA771D5FA6DB426DA6AE6029A2B00AE4</code> <code>F922EDC75AD30EC647F4AFBA2E6956EC</code> <code>8BE830080474E114C27D6AD52249DF75</code><br> <code>F95537CD</code></td>
<td>See below</td>
</tr>
</tbody>
@ -502,20 +502,20 @@ random_padding_bytes = 198E72F87D664F2C97FF68422E35D0D39EB0DD8BE6A89351F03E56965
<!-- 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 = CC1E6EBC1BF2E8A22E397E4095663506FC09C7212912A6F9A23785CEFF97719D5A1AB5CF19136DC48CD14A3093F83C4487F72325319207DB5E1472B936B3B1929AF42BD29FA1FD4C907323C93B365F0A0A81414FC1FBBD1249BF608CFDCC786D52BDFDD7B33E538EEA34922EFAD1E7FAE91F4950FA28DA1610ADF248E92E608E0A319FCC7762725ED1653C06675820C3D804B7601B970D8BBF8D3DFAAC587B5CD8F7AB23D19D11556C1939F27C5508873601B4421DAB534419797B5782A6B0D4728D46C5FD38A7A2BE0226A25844F30A4D8780FA837AF374154CF9F33E7018837EDD5D16303B8767D4A76D57E61F08E0EE02AA29C73D73F1AFB4095065F61E74429AD223DD08E042121E062CE85225F195BC8C6550B201B75555D68BAF71D44A495167F947A48937198D87F7F62B2FA295A378439A8B82A587ECC8507853554B0C53872C7801910075DEDEFDAF134E6FD4D41252A7F608999FA77EE9B0B7FBEF3B15BF3C43CE57AA05A26342D563AFDCD1E401FAF98398C2D212E4E507967EE0FA68FAB5AD25681B89F56F764E98D344AD2D84CF423843B1A39B7AA90F52DA7E2A7D7488AB50281900EC6118609676442B90B633D49DC8FD6EDE16615BCD0FA1FEDC47ACAE22927E219C4D1ABC213E20005AB89F3558A04376826EDD8F49A90AFA66A0AA9966C4DA74B94B5E7FDB10DDD2CBE28D5D4F7E74EC5E8B14526A7B44745E5D75E67DB2CB013CA4F179DAE0B68F641D097A7C1E79291E8B9CB2857E8BCD5C47B6A9C9254ADB72A0AEDBFBCDE6294A3E8FFB4C42EEBD8336AE9B9E7DF7E5225DE49F9D84826FDAA5B2A935D48A
tmp_aes_key = 2FFA7A8B9C004E2428EDF3C965734A2180488F7E392040057C4EB60FE2805C61
tmp_aes_iv = 038D0785056EC5DBBCC8FB4CE5CC75F6DF508A3F20C99FD90C106AAF4666D8D8</code></pre>
<pre><code>encrypted_answer = D29917ED5FF3F8F51E7F8A47C7B25FB7AAE69F7BE198FBD3FC7A6A879830CEB42C24F039C4B696CC0728A18E2843F7E1F7F9F86D46499ABE9F050BF12DECF4CB6E075ECB6F28BC769E9E23D33720FB3AEF171436521B0881476B91F875F8BFD403DEF5B467B9BEE7DAA4F972214C34BC767563B5379F1DD4970E95ECDA9D46A91DCB60CE263197881AF65131EF01350F3ED2C7E316BC36EE007ECE88CFDDA7DFC9DA94B858C7635D9AC3F771A59BDDD39255EB723B27BA9075490CE07F0CD6C73482F9E1C82C9F33FA334F78C77191D1E82EBC6A7A1DC88C9CC27191C0B07A6E150815A53E7F7462BFE4D441B63EAAEFD95D3AD5DE0ABAE90C6FDBCFB9C56C73460C9746D85845A31141F609E1646BC976B2C493E7E15EB5774071702F1C6FD2FB2C78F761F12CF9D55BF23E6CA26727405205B35EEF50647B61633F039164F0D06C0ADD7B8847E0077BAA2E260033F220193FEB93F6F03013E5993F15F907EC0BAA7021E14E7E7DAF3D3430793036767DCDFEDBACA4270DD46DD45E46F86FD76D35C705F7B93D915BDE0D8039C3755971A0865E27E5E73672D9B7284E3B8EE601FA35817EF5B36452464B3CF485862BF3B58CE2DE2DD3E1817E40C276CA5A3A110E1AE30AA285D2EF5EF38C3E397F385E7B2EA75C4B62422EE50ECF8723EB88273AE9125B70E5AB1D431692C92C91DD44EB252BED0EA32222C8712281CACF2DF5635266FD583E0C122764DBCAAF439ED53522C9B8253A8C12A8D935EA771D5FA6DB426DA6AE6029A2B00AE4F922EDC75AD30EC647F4AFBA2E6956EC8BE830080474E114C27D6AD52249DF75F95537CD
tmp_aes_key = 98173694F80A3DEA8E6E1237B317DC8EA983D7B180F7152E25F461CCA059CA25
tmp_aes_iv = C6DC6366725C19455CDCD47707D1843FF21BBFE2B9B17ED018930B13C7C0982D</code></pre>
<!-- end server_DH_inner_data_input -->
<p>Yielding:</p>
<!-- start server_DH_inner_data_output -->
<pre><code>answer_with_hash = EA5FB80C2C6D3157C6F494F7C6D26A9A1705F989BA0D89B5D943A3CFF05DDED84CBDB5C9730093EEDBA29FC9E2110692561C3C74948FE1DE03000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100469E938124EDC32D8D55E1BE2F9CBF54122C87D19ABA6011B3B8096567986F42E75F0F1877A659AB6A5A6740D2F6B4B136A3F7115CEA0934FF6629018B971FC4B1FF9AA2FB97841DE5D7D78F3F1574C96EB7153236679C6326869C5193DCAE3A0F0F6904367DD7EEC451AFE69F5950B6FF3BD804108437913B98F4C15055B0D18ECC68CA69A1D4D110857C3E3C150CB504A3DA16ECFDFD88E382E07D6EC66D8F37ED408E5E78321196A9F104703778FE715DC50E2ABBF59B3241AFD02AD26AFA83A0F8DE35B810D8691F0DE0183055186E175E00A21076CA59C870F225332082C4DD6C7D755D7111440D58A6A4E4DAAD6A4B57EBEED1FBA14A8F24400AA369E1F220A966B6913D4661220FED
answer = BA0D89B5D943A3CFF05DDED84CBDB5C9730093EEDBA29FC9E2110692561C3C74948FE1DE03000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100469E938124EDC32D8D55E1BE2F9CBF54122C87D19ABA6011B3B8096567986F42E75F0F1877A659AB6A5A6740D2F6B4B136A3F7115CEA0934FF6629018B971FC4B1FF9AA2FB97841DE5D7D78F3F1574C96EB7153236679C6326869C5193DCAE3A0F0F6904367DD7EEC451AFE69F5950B6FF3BD804108437913B98F4C15055B0D18ECC68CA69A1D4D110857C3E3C150CB504A3DA16ECFDFD88E382E07D6EC66D8F37ED408E5E78321196A9F104703778FE715DC50E2ABBF59B3241AFD02AD26AFA83A0F8DE35B810D8691F0DE0183055186E175E00A21076CA59C870F225332082C4DD6C7D755D7111440D58A6A4E4DAAD6A4B57EBEED1FBA14A8F24400AA369E1F220A966B6913D4661220FED</code></pre>
<pre><code>answer_with_hash = 1CC8DB90C412DD0B7D01620E920AB2CD83D53243BA0D89B512C3064DDCAA119F34EB2826C78224D9BBEB558F3B71357F8621B71251B270D203000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE0001006F1A1A25F92E2204530154FEDF318B67275B2D36514352899B61C29A3A3BCCED0BF5DA7202FCC84181BA7411173AF0AB9D2BEEF79F211033E9A068E960965328CB9AC93851E8D3A0CB0E907EF89C7AC9553D951165610E4122DF11745C0445EABF5EE96E0AFB2599A08CA30CDB56FFA1866124B575AFF159302B786BAC597074BE21CD352541B4D3B88AF8787E242292CCA84A5D2BC2EA89D423306E6C11BABF5C8CAFE34E468E41DE822BCA6F93A8CF88635A7B9D740ACF196F6289BA5A5021018EC726DE61F253C40E6FF23665639932708437C97E837B7ADD0674DB2D9CF72B012763EFF57B08D4C396A7EA4B9EE0F4141A037FC67E1C6970E49FBE7FA9586B21A966A561E92B4398E2DE
answer = BA0D89B512C3064DDCAA119F34EB2826C78224D9BBEB558F3B71357F8621B71251B270D203000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE0001006F1A1A25F92E2204530154FEDF318B67275B2D36514352899B61C29A3A3BCCED0BF5DA7202FCC84181BA7411173AF0AB9D2BEEF79F211033E9A068E960965328CB9AC93851E8D3A0CB0E907EF89C7AC9553D951165610E4122DF11745C0445EABF5EE96E0AFB2599A08CA30CDB56FFA1866124B575AFF159302B786BAC597074BE21CD352541B4D3B88AF8787E242292CCA84A5D2BC2EA89D423306E6C11BABF5C8CAFE34E468E41DE822BCA6F93A8CF88635A7B9D740ACF196F6289BA5A5021018EC726DE61F253C40E6FF23665639932708437C97E837B7ADD0674DB2D9CF72B012763EFF57B08D4C396A7EA4B9EE0F4141A037FC67E1C6970E49FBE7FA9586B21A966A561E92B4398E2DE</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 D9 43 A3 CF F0 5D DE D8 4C BD B5 C9
0010 | 73 00 93 EE DB A2 9F C9 E2 11 06 92 56 1C 3C 74
0020 | 94 8F E1 DE 03 00 00 00 FE 00 01 00 C7 1C AE B9
<pre><code>0000 | BA 0D 89 B5 12 C3 06 4D DC AA 11 9F 34 EB 28 26
0010 | C7 82 24 D9 BB EB 55 8F 3B 71 35 7F 86 21 B7 12
0020 | 51 B2 70 D2 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 = BA0D89B5D943A3CFF05DDED84CBDB5C9730093EEDBA29FC9E2110692561C3C74948FE1D
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 | 46 9E 93 81 24 ED C3 2D 8D 55 E1 BE 2F 9C BF 54
0140 | 12 2C 87 D1 9A BA 60 11 B3 B8 09 65 67 98 6F 42
0150 | E7 5F 0F 18 77 A6 59 AB 6A 5A 67 40 D2 F6 B4 B1
0160 | 36 A3 F7 11 5C EA 09 34 FF 66 29 01 8B 97 1F C4
0170 | B1 FF 9A A2 FB 97 84 1D E5 D7 D7 8F 3F 15 74 C9
0180 | 6E B7 15 32 36 67 9C 63 26 86 9C 51 93 DC AE 3A
0190 | 0F 0F 69 04 36 7D D7 EE C4 51 AF E6 9F 59 50 B6
01A0 | FF 3B D8 04 10 84 37 91 3B 98 F4 C1 50 55 B0 D1
01B0 | 8E CC 68 CA 69 A1 D4 D1 10 85 7C 3E 3C 15 0C B5
01C0 | 04 A3 DA 16 EC FD FD 88 E3 82 E0 7D 6E C6 6D 8F
01D0 | 37 ED 40 8E 5E 78 32 11 96 A9 F1 04 70 37 78 FE
01E0 | 71 5D C5 0E 2A BB F5 9B 32 41 AF D0 2A D2 6A FA
01F0 | 83 A0 F8 DE 35 B8 10 D8 69 1F 0D E0 18 30 55 18
0200 | 6E 17 5E 00 A2 10 76 CA 59 C8 70 F2 25 33 20 82
0210 | C4 DD 6C 7D 75 5D 71 11 44 0D 58 A6 A4 E4 DA AD
0220 | 6A 4B 57 EB EE D1 FB A1 4A 8F 24 40 0A A3 69 E1
0230 | F2 20 A9 66</code></pre>
0130 | 6F 1A 1A 25 F9 2E 22 04 53 01 54 FE DF 31 8B 67
0140 | 27 5B 2D 36 51 43 52 89 9B 61 C2 9A 3A 3B CC ED
0150 | 0B F5 DA 72 02 FC C8 41 81 BA 74 11 17 3A F0 AB
0160 | 9D 2B EE F7 9F 21 10 33 E9 A0 68 E9 60 96 53 28
0170 | CB 9A C9 38 51 E8 D3 A0 CB 0E 90 7E F8 9C 7A C9
0180 | 55 3D 95 11 65 61 0E 41 22 DF 11 74 5C 04 45 EA
0190 | BF 5E E9 6E 0A FB 25 99 A0 8C A3 0C DB 56 FF A1
01A0 | 86 61 24 B5 75 AF F1 59 30 2B 78 6B AC 59 70 74
01B0 | BE 21 CD 35 25 41 B4 D3 B8 8A F8 78 7E 24 22 92
01C0 | CC A8 4A 5D 2B C2 EA 89 D4 23 30 6E 6C 11 BA BF
01D0 | 5C 8C AF E3 4E 46 8E 41 DE 82 2B CA 6F 93 A8 CF
01E0 | 88 63 5A 7B 9D 74 0A CF 19 6F 62 89 BA 5A 50 21
01F0 | 01 8E C7 26 DE 61 F2 53 C4 0E 6F F2 36 65 63 99
0200 | 32 70 84 37 C9 7E 83 7B 7A DD 06 74 DB 2D 9C F7
0210 | 2B 01 27 63 EF F5 7B 08 D4 C3 96 A7 EA 4B 9E E0
0220 | F4 14 1A 03 7F C6 7E 1C 69 70 E4 9F BE 7F A9 58
0230 | 6B 21 A9 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 = BA0D89B5D943A3CFF05DDED84CBDB5C9730093EEDBA29FC9E2110692561C3C74948FE1D
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>D943A3CFF05DDED84CBDB5C9730093EE</code></td>
<td><code>12C3064DDCAA119F34EB2826C78224D9</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>DBA29FC9E2110692561C3C74948FE1DE</code></td>
<td><code>BBEB558F3B71357F8621B71251B270D2</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
@ -594,13 +594,13 @@ answer = BA0D89B5D943A3CFF05DDED84CBDB5C9730093EEDBA29FC9E2110692561C3C74948FE1D
<tr>
<td>g_a</td>
<td>300, 260</td>
<td><code>FE000100469E938124EDC32D8D55E1BE</code> <code>2F9CBF54122C87D19ABA6011B3B80965</code> <code>67986F42E75F0F1877A659AB6A5A6740</code> <code>D2F6B4B136A3F7115CEA0934FF662901</code> <code>8B971FC4B1FF9AA2FB97841DE5D7D78F</code> <code>3F1574C96EB7153236679C6326869C51</code> <code>93DCAE3A0F0F6904367DD7EEC451AFE6</code> <code>9F5950B6FF3BD804108437913B98F4C1</code> <code>5055B0D18ECC68CA69A1D4D110857C3E</code> <code>3C150CB504A3DA16ECFDFD88E382E07D</code> <code>6EC66D8F37ED408E5E78321196A9F104</code> <code>703778FE715DC50E2ABBF59B3241AFD0</code> <code>2AD26AFA83A0F8DE35B810D8691F0DE0</code> <code>183055186E175E00A21076CA59C870F2</code> <code>25332082C4DD6C7D755D7111440D58A6</code> <code>A4E4DAAD6A4B57EBEED1FBA14A8F2440</code><br> <code>0AA369E1</code></td>
<td><code>FE0001006F1A1A25F92E2204530154FE</code> <code>DF318B67275B2D36514352899B61C29A</code> <code>3A3BCCED0BF5DA7202FCC84181BA7411</code> <code>173AF0AB9D2BEEF79F211033E9A068E9</code> <code>60965328CB9AC93851E8D3A0CB0E907E</code> <code>F89C7AC9553D951165610E4122DF1174</code> <code>5C0445EABF5EE96E0AFB2599A08CA30C</code> <code>DB56FFA1866124B575AFF159302B786B</code> <code>AC597074BE21CD352541B4D3B88AF878</code> <code>7E242292CCA84A5D2BC2EA89D423306E</code> <code>6C11BABF5C8CAFE34E468E41DE822BCA</code> <code>6F93A8CF88635A7B9D740ACF196F6289</code> <code>BA5A5021018EC726DE61F253C40E6FF2</code> <code>3665639932708437C97E837B7ADD0674</code> <code>DB2D9CF72B012763EFF57B08D4C396A7</code> <code>EA4B9EE0F4141A037FC67E1C6970E49F</code><br> <code>BE7FA958</code></td>
<td><code>g_a</code> diffie-hellman parameter</td>
</tr>
<tr>
<td>server_time</td>
<td>560, 4</td>
<td><code>F220A966</code> (1722360050 in decimal)</td>
<td><code>6B21A966</code> (1722360171 in decimal)</td>
<td>Server time</td>
</tr>
</tbody>
@ -609,34 +609,34 @@ answer = BA0D89B5D943A3CFF05DDED84CBDB5C9730093EEDBA29FC9E2110692561C3C74948FE1D
<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 = 1CFBD607ECFB4A8A92411D4E252229A9A432ADEC8D0EB3FF9A24083E96902B4550ADE629A03F927F7A011F9DDC1230B7A5AB933CF256AA44E9EC51BD0E95F8047458F9D11C67F23ECCBAADD26EF34EA58FDB0243C7FE74A8F88DFC90122975F0E19DE08924055FE28F2D49E941369240122D711F93801D47FC02885B6F82C6B40448AB13E965891C890880900AF883067EFAAD00B6F8E67AB6DA195B5D0499E8ED63A92B543A91C6D9E2BC8522F762EB4D3A993151476C169B22A92AAB0C40271D97F21AAC7BAB6CF1AEBBDF72567C645546FE18844049285051EAD74E4AE7D2C35A77D7797822F4F98E8A3B89A85E10177AFE9BBBE2F03FDA6A9462CA4EC094</code></pre>
<pre><code>b = 73B57F2EF891BA8F663689A4A9E8EAFECCCF27FC3ACE87415B6E97F91D204B54E99EA2194570A0C0EECB589F43BA77FE2CE828A00372A5FF533491D2003AA199A99ED2D43CAF12BD4FD2520CB221B6EEAB614EF5F785690491907A858D5B9609719BDF7719E98C6983EC6C6BAC5D0776E96251C96CA7FDB62943F62A3D511949B612AA5711CBBAC8FAA4C1F2E2D1048578198756148709CF5B0297E127B2DE1E10A967385ACA8BD89BD40D530C48136B88C455F0547DE8E526618ADA7E40C62BD8860F741DFDDD536636A9295704FA4093605EA808ACB23A00A121602ACAD38C17AF06983B287DF8296E68EB6450F645FB92BD50F05350006727EB5E614F39C3</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 = 08E0814CCDE4FE2783C33149BFFDD430C60F74AA250418313773D4212DFAE2737B4F7AA9D78BCBBC303B4218E190598B828B243B02D3F844CF0EF247837DB200DAF0A310103681803FD60DFEEE2BCD9E211CFB396C70CC5A4FAD1C15B8E1986BC3268CACF094EF02CC36D13806BAFED2A6E1E92923E8166761078F8048F0B05407CA73CA57FCF2C387C7D6A9D04F091615E6D316A4CA2327D5291676B9D337F245089DEF67A765794945C3D6A1D4340C0F75A456B6E3D2BE45AC0EB9AF7360270FB3332C6AA0C15F4515A2C7E7115F69659A3CC09309D717F94F95BF2A533F8C0F9A0F82197487D322CCF68B96C7D3815CCE8D3E57AE93AB4E8F46DF5483A082</code></pre>
<pre><code>g_b = 4821714C863B074C59ADF5A68974A4520DD5C7A322E17B39EC5E14A55DF13FA46802DB781867285251C7FA6250ECFA2FECD842DAAC02B0898BEACFB85FF1B80BDF1A0A6923E5CAE410B67F897B0333BEC09695E64563ABFD9E40712B3A5F2013343AE46876464CA0516F67BD4749579368F444EC83D125BB4DC8D9A9E907E66F8033C913045B072CF2769F06D3F4207E753525F0DF3E97812A4AD34ABBBE72D02949D52B5975E49CB2EC086FF93583C529A39449C35A4E3ED8C455DF2559D807E9B20B171B0FF26666DF1FCE451B396DB75EF20470118C35D3B70B8836AC18D32D7C31F7C2AB497B2ED88F1EADC269ECEC42984FAE17CE49C31B364473725FA4</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 D9 43 A3 CF F0 5D DE D8 4C BD B5 C9
0010 | 73 00 93 EE DB A2 9F C9 E2 11 06 92 56 1C 3C 74
0020 | 94 8F E1 DE 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | 08 E0 81 4C CD E4 FE 27 83 C3 31 49 BF FD D4 30
0040 | C6 0F 74 AA 25 04 18 31 37 73 D4 21 2D FA E2 73
0050 | 7B 4F 7A A9 D7 8B CB BC 30 3B 42 18 E1 90 59 8B
0060 | 82 8B 24 3B 02 D3 F8 44 CF 0E F2 47 83 7D B2 00
0070 | DA F0 A3 10 10 36 81 80 3F D6 0D FE EE 2B CD 9E
0080 | 21 1C FB 39 6C 70 CC 5A 4F AD 1C 15 B8 E1 98 6B
0090 | C3 26 8C AC F0 94 EF 02 CC 36 D1 38 06 BA FE D2
00A0 | A6 E1 E9 29 23 E8 16 67 61 07 8F 80 48 F0 B0 54
00B0 | 07 CA 73 CA 57 FC F2 C3 87 C7 D6 A9 D0 4F 09 16
00C0 | 15 E6 D3 16 A4 CA 23 27 D5 29 16 76 B9 D3 37 F2
00D0 | 45 08 9D EF 67 A7 65 79 49 45 C3 D6 A1 D4 34 0C
00E0 | 0F 75 A4 56 B6 E3 D2 BE 45 AC 0E B9 AF 73 60 27
00F0 | 0F B3 33 2C 6A A0 C1 5F 45 15 A2 C7 E7 11 5F 69
0100 | 65 9A 3C C0 93 09 D7 17 F9 4F 95 BF 2A 53 3F 8C
0110 | 0F 9A 0F 82 19 74 87 D3 22 CC F6 8B 96 C7 D3 81
0120 | 5C CE 8D 3E 57 AE 93 AB 4E 8F 46 DF 54 83 A0 82</code></pre>
<pre><code>0000 | 54 B6 43 66 12 C3 06 4D DC AA 11 9F 34 EB 28 26
0010 | C7 82 24 D9 BB EB 55 8F 3B 71 35 7F 86 21 B7 12
0020 | 51 B2 70 D2 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | 48 21 71 4C 86 3B 07 4C 59 AD F5 A6 89 74 A4 52
0040 | 0D D5 C7 A3 22 E1 7B 39 EC 5E 14 A5 5D F1 3F A4
0050 | 68 02 DB 78 18 67 28 52 51 C7 FA 62 50 EC FA 2F
0060 | EC D8 42 DA AC 02 B0 89 8B EA CF B8 5F F1 B8 0B
0070 | DF 1A 0A 69 23 E5 CA E4 10 B6 7F 89 7B 03 33 BE
0080 | C0 96 95 E6 45 63 AB FD 9E 40 71 2B 3A 5F 20 13
0090 | 34 3A E4 68 76 46 4C A0 51 6F 67 BD 47 49 57 93
00A0 | 68 F4 44 EC 83 D1 25 BB 4D C8 D9 A9 E9 07 E6 6F
00B0 | 80 33 C9 13 04 5B 07 2C F2 76 9F 06 D3 F4 20 7E
00C0 | 75 35 25 F0 DF 3E 97 81 2A 4A D3 4A BB BE 72 D0
00D0 | 29 49 D5 2B 59 75 E4 9C B2 EC 08 6F F9 35 83 C5
00E0 | 29 A3 94 49 C3 5A 4E 3E D8 C4 55 DF 25 59 D8 07
00F0 | E9 B2 0B 17 1B 0F F2 66 66 DF 1F CE 45 1B 39 6D
0100 | B7 5E F2 04 70 11 8C 35 D3 B7 0B 88 36 AC 18 D3
0110 | 2D 7C 31 F7 C2 AB 49 7B 2E D8 8F 1E AD C2 69 EC
0120 | EC 42 98 4F AE 17 CE 49 C3 1B 36 44 73 72 5F A4</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 = BA0D89B5D943A3CFF05DDED84CBDB5C9730093EEDBA29FC9E2110692561C3C74948FE1D
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>D943A3CFF05DDED84CBDB5C9730093EE</code></td>
<td><code>12C3064DDCAA119F34EB2826C78224D9</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>DBA29FC9E2110692561C3C74948FE1DE</code></td>
<td><code>BBEB558F3B71357F8621B71251B270D2</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>g_b</td>
<td>36, 260</td>
<td><code>FE00010008E0814CCDE4FE2783C33149</code> <code>BFFDD430C60F74AA250418313773D421</code> <code>2DFAE2737B4F7AA9D78BCBBC303B4218</code> <code>E190598B828B243B02D3F844CF0EF247</code> <code>837DB200DAF0A310103681803FD60DFE</code> <code>EE2BCD9E211CFB396C70CC5A4FAD1C15</code> <code>B8E1986BC3268CACF094EF02CC36D138</code> <code>06BAFED2A6E1E92923E8166761078F80</code> <code>48F0B05407CA73CA57FCF2C387C7D6A9</code> <code>D04F091615E6D316A4CA2327D5291676</code> <code>B9D337F245089DEF67A765794945C3D6</code> <code>A1D4340C0F75A456B6E3D2BE45AC0EB9</code> <code>AF7360270FB3332C6AA0C15F4515A2C7</code> <code>E7115F69659A3CC09309D717F94F95BF</code> <code>2A533F8C0F9A0F82197487D322CCF68B</code> <code>96C7D3815CCE8D3E57AE93AB4E8F46DF</code><br> <code>5483A082</code></td>
<td><code>FE0001004821714C863B074C59ADF5A6</code> <code>8974A4520DD5C7A322E17B39EC5E14A5</code> <code>5DF13FA46802DB781867285251C7FA62</code> <code>50ECFA2FECD842DAAC02B0898BEACFB8</code> <code>5FF1B80BDF1A0A6923E5CAE410B67F89</code> <code>7B0333BEC09695E64563ABFD9E40712B</code> <code>3A5F2013343AE46876464CA0516F67BD</code> <code>4749579368F444EC83D125BB4DC8D9A9</code> <code>E907E66F8033C913045B072CF2769F06</code> <code>D3F4207E753525F0DF3E97812A4AD34A</code> <code>BBBE72D02949D52B5975E49CB2EC086F</code> <code>F93583C529A39449C35A4E3ED8C455DF</code> <code>2559D807E9B20B171B0FF26666DF1FCE</code> <code>451B396DB75EF20470118C35D3B70B88</code> <code>36AC18D32D7C31F7C2AB497B2ED88F1E</code> <code>ADC269ECEC42984FAE17CE49C31B3644</code><br> <code>73725FA4</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 = BA0D89B5D943A3CFF05DDED84CBDB5C9730093EEDBA29FC9E2110692561C3C74948FE1D
<!-- 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 = 54B64366D943A3CFF05DDED84CBDB5C9730093EEDBA29FC9E2110692561C3C74948FE1DE0000000000000000FE00010008E0814CCDE4FE2783C33149BFFDD430C60F74AA250418313773D4212DFAE2737B4F7AA9D78BCBBC303B4218E190598B828B243B02D3F844CF0EF247837DB200DAF0A310103681803FD60DFEEE2BCD9E211CFB396C70CC5A4FAD1C15B8E1986BC3268CACF094EF02CC36D13806BAFED2A6E1E92923E8166761078F8048F0B05407CA73CA57FCF2C387C7D6A9D04F091615E6D316A4CA2327D5291676B9D337F245089DEF67A765794945C3D6A1D4340C0F75A456B6E3D2BE45AC0EB9AF7360270FB3332C6AA0C15F4515A2C7E7115F69659A3CC09309D717F94F95BF2A533F8C0F9A0F82197487D322CCF68B96C7D3815CCE8D3E57AE93AB4E8F46DF5483A082
padding = 50F9935FE93EF34881CD7273
tmp_aes_key = 2FFA7A8B9C004E2428EDF3C965734A2180488F7E392040057C4EB60FE2805C61
tmp_aes_iv = 038D0785056EC5DBBCC8FB4CE5CC75F6DF508A3F20C99FD90C106AAF4666D8D8</code></pre>
<pre><code>data = 54B6436612C3064DDCAA119F34EB2826C78224D9BBEB558F3B71357F8621B71251B270D20000000000000000FE0001004821714C863B074C59ADF5A68974A4520DD5C7A322E17B39EC5E14A55DF13FA46802DB781867285251C7FA6250ECFA2FECD842DAAC02B0898BEACFB85FF1B80BDF1A0A6923E5CAE410B67F897B0333BEC09695E64563ABFD9E40712B3A5F2013343AE46876464CA0516F67BD4749579368F444EC83D125BB4DC8D9A9E907E66F8033C913045B072CF2769F06D3F4207E753525F0DF3E97812A4AD34ABBBE72D02949D52B5975E49CB2EC086FF93583C529A39449C35A4E3ED8C455DF2559D807E9B20B171B0FF26666DF1FCE451B396DB75EF20470118C35D3B70B8836AC18D32D7C31F7C2AB497B2ED88F1EADC269ECEC42984FAE17CE49C31B364473725FA4
padding = AB14EBA0A63497D4168238D2
tmp_aes_key = 98173694F80A3DEA8E6E1237B317DC8EA983D7B180F7152E25F461CCA059CA25
tmp_aes_iv = C6DC6366725C19455CDCD47707D1843FF21BBFE2B9B17ED018930B13C7C0982D</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 = 15C289970C2C7C0FC0B6569A788D5061C96891158EBFDE11CE28A0A90DAD574D113EBBEC68BBCF549EC8E9FBA992238903D1F3F57338491AEEBC98C0C8902863F89FD96A83F551BC54D2985E79BE7232415E516D5DC7368FFA5BC882ABDA8610109BCDACCC0674BA519B11DA151E7C23823B3C5B55ECD3EE5E8FB53B4E3624F56991C8F66F52BB0420B356AE65EA8B17A33C98DE2DA9B272B766CEDD559FBAB202873F5750E4F2498FB120B1A4E95D6460FD7A475A74EA2843133F8F27D959A5947352D25437A44EF396D31CCA7B4BA5CF1977743F7A636A80A4CF4D8047D2335B2FC41CDA4B856FA020C77A53C3FC6E392CDE6976E2879966E27C21D338493568D300CAEAC3024A879388ADFA6EE8B0E090FC2A19C1E609B7584BC9062EA2E8AC386C067AE33DDE568601067B33A6D776D2E6E7C7A1E12FC2D9FD5198337EBC17C2B6EC27A672E1E18D13BDE5D4D654</code></pre>
<pre><code>encrypted_data = C4A12345DED287DEE264A3EF414AA4641360E00F32995965A00828E474694E1946573C813ED74CE6D5484E9ABBB3A3186B04FAA5F8D0C4274C0C3E3DC7DDE478461DF42831809E386489E941BC9F073AE45ECB1158FFE601283775D7FB39ABF44D196971B961C24EC2A5F5299316239393D6248742D2708A0F67F378261944D1FBDC00BD7EE71FCDD0DF294730D88D8012F7B4F27199A44A5A54989063F95E717651EAF704141DF80450A1949F1A175884A7FB08F39A7980C43D30E9E7F8255D78F84653C244072DD13EE9E19E7FE6B9F1B3759F959349E23EB97B0A1C16CF314E24D8E32A76053494E0054B81B2A342CC2510D88AE7E8376EC69F72A260BF4A024F6A854BD8D04747DAECEC66B7370C08267583011C859BFF4422699F5EA83C22AB09810B16217F8824C871023D224A03B50B3DA3418D199DBDD57E986F5140035978DC57F7AA98BD46C927B94A36D6</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 8C 27 0D 00 F2 20 A9 66
0010 | 78 01 00 00 1F 5F 04 F5 D9 43 A3 CF F0 5D DE D8
0020 | 4C BD B5 C9 73 00 93 EE DB A2 9F C9 E2 11 06 92
0030 | 56 1C 3C 74 94 8F E1 DE FE 50 01 00 15 C2 89 97
0040 | 0C 2C 7C 0F C0 B6 56 9A 78 8D 50 61 C9 68 91 15
0050 | 8E BF DE 11 CE 28 A0 A9 0D AD 57 4D 11 3E BB EC
0060 | 68 BB CF 54 9E C8 E9 FB A9 92 23 89 03 D1 F3 F5
0070 | 73 38 49 1A EE BC 98 C0 C8 90 28 63 F8 9F D9 6A
0080 | 83 F5 51 BC 54 D2 98 5E 79 BE 72 32 41 5E 51 6D
0090 | 5D C7 36 8F FA 5B C8 82 AB DA 86 10 10 9B CD AC
00A0 | CC 06 74 BA 51 9B 11 DA 15 1E 7C 23 82 3B 3C 5B
00B0 | 55 EC D3 EE 5E 8F B5 3B 4E 36 24 F5 69 91 C8 F6
00C0 | 6F 52 BB 04 20 B3 56 AE 65 EA 8B 17 A3 3C 98 DE
00D0 | 2D A9 B2 72 B7 66 CE DD 55 9F BA B2 02 87 3F 57
00E0 | 50 E4 F2 49 8F B1 20 B1 A4 E9 5D 64 60 FD 7A 47
00F0 | 5A 74 EA 28 43 13 3F 8F 27 D9 59 A5 94 73 52 D2
0100 | 54 37 A4 4E F3 96 D3 1C CA 7B 4B A5 CF 19 77 74
0110 | 3F 7A 63 6A 80 A4 CF 4D 80 47 D2 33 5B 2F C4 1C
0120 | DA 4B 85 6F A0 20 C7 7A 53 C3 FC 6E 39 2C DE 69
0130 | 76 E2 87 99 66 E2 7C 21 D3 38 49 35 68 D3 00 CA
0140 | EA C3 02 4A 87 93 88 AD FA 6E E8 B0 E0 90 FC 2A
0150 | 19 C1 E6 09 B7 58 4B C9 06 2E A2 E8 AC 38 6C 06
0160 | 7A E3 3D DE 56 86 01 06 7B 33 A6 D7 76 D2 E6 E7
0170 | C7 A1 E1 2F C2 D9 FD 51 98 33 7E BC 17 C2 B6 EC
0180 | 27 A6 72 E1 E1 8D 13 BD E5 D4 D6 54</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 94 5D 0C 00 6B 21 A9 66
0010 | 78 01 00 00 1F 5F 04 F5 12 C3 06 4D DC AA 11 9F
0020 | 34 EB 28 26 C7 82 24 D9 BB EB 55 8F 3B 71 35 7F
0030 | 86 21 B7 12 51 B2 70 D2 FE 50 01 00 C4 A1 23 45
0040 | DE D2 87 DE E2 64 A3 EF 41 4A A4 64 13 60 E0 0F
0050 | 32 99 59 65 A0 08 28 E4 74 69 4E 19 46 57 3C 81
0060 | 3E D7 4C E6 D5 48 4E 9A BB B3 A3 18 6B 04 FA A5
0070 | F8 D0 C4 27 4C 0C 3E 3D C7 DD E4 78 46 1D F4 28
0080 | 31 80 9E 38 64 89 E9 41 BC 9F 07 3A E4 5E CB 11
0090 | 58 FF E6 01 28 37 75 D7 FB 39 AB F4 4D 19 69 71
00A0 | B9 61 C2 4E C2 A5 F5 29 93 16 23 93 93 D6 24 87
00B0 | 42 D2 70 8A 0F 67 F3 78 26 19 44 D1 FB DC 00 BD
00C0 | 7E E7 1F CD D0 DF 29 47 30 D8 8D 80 12 F7 B4 F2
00D0 | 71 99 A4 4A 5A 54 98 90 63 F9 5E 71 76 51 EA F7
00E0 | 04 14 1D F8 04 50 A1 94 9F 1A 17 58 84 A7 FB 08
00F0 | F3 9A 79 80 C4 3D 30 E9 E7 F8 25 5D 78 F8 46 53
0100 | C2 44 07 2D D1 3E E9 E1 9E 7F E6 B9 F1 B3 75 9F
0110 | 95 93 49 E2 3E B9 7B 0A 1C 16 CF 31 4E 24 D8 E3
0120 | 2A 76 05 34 94 E0 05 4B 81 B2 A3 42 CC 25 10 D8
0130 | 8A E7 E8 37 6E C6 9F 72 A2 60 BF 4A 02 4F 6A 85
0140 | 4B D8 D0 47 47 DA EC EC 66 B7 37 0C 08 26 75 83
0150 | 01 1C 85 9B FF 44 22 69 9F 5E A8 3C 22 AB 09 81
0160 | 0B 16 21 7F 88 24 C8 71 02 3D 22 4A 03 B5 0B 3D
0170 | A3 41 8D 19 9D BD D5 7E 98 6F 51 40 03 59 78 DC
0180 | 57 F7 AA 98 BD 46 C9 27 B9 4A 36 D6</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>8C270D00F220A966</code></td>
<td><code>945D0C006B21A966</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>D943A3CFF05DDED84CBDB5C9730093EE</code></td>
<td><code>12C3064DDCAA119F34EB2826C78224D9</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>DBA29FC9E2110692561C3C74948FE1DE</code></td>
<td><code>BBEB558F3B71357F8621B71251B270D2</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_data</td>
<td>56, 340</td>
<td><code>FE50010015C289970C2C7C0FC0B6569A</code> <code>788D5061C96891158EBFDE11CE28A0A9</code> <code>0DAD574D113EBBEC68BBCF549EC8E9FB</code> <code>A992238903D1F3F57338491AEEBC98C0</code> <code>C8902863F89FD96A83F551BC54D2985E</code> <code>79BE7232415E516D5DC7368FFA5BC882</code> <code>ABDA8610109BCDACCC0674BA519B11DA</code> <code>151E7C23823B3C5B55ECD3EE5E8FB53B</code> <code>4E3624F56991C8F66F52BB0420B356AE</code> <code>65EA8B17A33C98DE2DA9B272B766CEDD</code> <code>559FBAB202873F5750E4F2498FB120B1</code> <code>A4E95D6460FD7A475A74EA2843133F8F</code> <code>27D959A5947352D25437A44EF396D31C</code> <code>CA7B4BA5CF1977743F7A636A80A4CF4D</code> <code>8047D2335B2FC41CDA4B856FA020C77A</code> <code>53C3FC6E392CDE6976E2879966E27C21</code> <code>D338493568D300CAEAC3024A879388AD</code> <code>FA6EE8B0E090FC2A19C1E609B7584BC9</code> <code>062EA2E8AC386C067AE33DDE56860106</code> <code>7B33A6D776D2E6E7C7A1E12FC2D9FD51</code> <code>98337EBC17C2B6EC27A672E1E18D13BD</code><br> <code>E5D4D654</code></td>
<td><code>FE500100C4A12345DED287DEE264A3EF</code> <code>414AA4641360E00F32995965A00828E4</code> <code>74694E1946573C813ED74CE6D5484E9A</code> <code>BBB3A3186B04FAA5F8D0C4274C0C3E3D</code> <code>C7DDE478461DF42831809E386489E941</code> <code>BC9F073AE45ECB1158FFE601283775D7</code> <code>FB39ABF44D196971B961C24EC2A5F529</code> <code>9316239393D6248742D2708A0F67F378</code> <code>261944D1FBDC00BD7EE71FCDD0DF2947</code> <code>30D88D8012F7B4F27199A44A5A549890</code> <code>63F95E717651EAF704141DF80450A194</code> <code>9F1A175884A7FB08F39A7980C43D30E9</code> <code>E7F8255D78F84653C244072DD13EE9E1</code> <code>9E7FE6B9F1B3759F959349E23EB97B0A</code> <code>1C16CF314E24D8E32A76053494E0054B</code> <code>81B2A342CC2510D88AE7E8376EC69F72</code> <code>A260BF4A024F6A854BD8D04747DAECEC</code> <code>66B7370C08267583011C859BFF442269</code> <code>9F5EA83C22AB09810B16217F8824C871</code> <code>023D224A03B50B3DA3418D199DBDD57E</code> <code>986F5140035978DC57F7AA98BD46C927</code><br> <code>B94A36D6</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 = B49B8DB57B5F89BBFF49A1396D27B4093716EAECC0969D0ABF7F8B430A10DE773CDFD9F2D3B80DF78B52A0750A25A7CF1C35EED3D93BEBC6327F716B9918AA07F3CD5A135AD95CF280783362AEC18A85CF537BCE4A4AE6869D5422DC0EEDDE854778125D7FFAA77296D25F467E987E72E84F1F14CFA13241FB86D89660BB23E6657FE85216F1012BEBE153ED321A3549863204F5059D5E3393C37E76C5AA602A6A7585E42C92E474D80A51CA5C0E89DB7F1C4CEC933C0294451B9EF962BB07F59128D3F6BC718CA4BF76E96D5A0C814756A3249B546A104619C63B6D7D5730DF4F7DF6EE1143B6B29ED0ABFA26CE0FDA5418852988E968864B903B7C91F56904</code></pre>
<pre><code>auth_key = 17AB568F50C050FABED921F5E69FF238119C0A0F06E5F61E005ADF81C467B697222F6C78EAB35045C67EB6EFB473AFF77A7C4CDDFAA900C1DDF6CAA114A4495D1A011AA83FAA7478626DF5269A5706F67E5F7BFE9FD6CE5F30C8E7B8AB4E84D03BB07EFE3779B0DC3EC101212D9D47E9AC717E95403A9AEF196DFC5C92968D1FB1853C6CAC9D80B5ACC1A920EEE5614B6686D05E77865E8CA163B4113CD0C23F499AF615BC62F25799E7946BF3ED9630E6F77F0995ECDA6E11A8D6B36288F7F1C763CE27BF4BD224658695B5ADB81D9291CCAA0E2D7CD9713851F69040FE945E3D6770983DA1EF13B6715CDF070262DC61A002A057765BFECDD62ED4FCDF5CB3</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 06 FF F3 20 A9 66
0010 | A4 00 00 00 34 F7 CB 3B D9 43 A3 CF F0 5D DE D8
0020 | 4C BD B5 C9 73 00 93 EE DB A2 9F C9 E2 11 06 92
0030 | 56 1C 3C 74 94 8F E1 DE F5 FD F3 E3 EA 95 15 FD
0040 | 71 F1 06 28 13 46 38 05</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 9C 46 F8 6B 21 A9 66
0010 | 80 00 00 00 34 F7 CB 3B 12 C3 06 4D DC AA 11 9F
0020 | 34 EB 28 26 C7 82 24 D9 BB EB 55 8F 3B 71 35 7F
0030 | 86 21 B7 12 51 B2 70 D2 DA F7 CC 4B 8E 84 63 55
0040 | 66 CC 78 20 D6 81 0D 79</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>019C06FFF320A966</code></td>
<td><code>019C46F86B21A966</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>A4000000</code> (164 in decimal)</td>
<td><code>80000000</code> (128 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>D943A3CFF05DDED84CBDB5C9730093EE</code></td>
<td><code>12C3064DDCAA119F34EB2826C78224D9</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>DBA29FC9E2110692561C3C74948FE1DE</code></td>
<td><code>BBEB558F3B71357F8621B71251B270D2</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce_hash1</td>
<td>56, 16</td>
<td><code>F5FDF3E3EA9515FD71F1062813463805</code></td>
<td><code>DAF7CC4B8E84635566CC7820D6810D79</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>