Update content of files

This commit is contained in:
GitHub Action 2023-12-24 18:55:25 +00:00
parent 2c3113b642
commit 35a5dc8dc6

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 A0 EF 07 00 0B 71 88 65
0010 | 14 00 00 00 F1 8E 7E BE E9 A9 5C F0 48 79 75 62
0020 | 4F 9F A5 93 55 26 26 58</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 F8 F4 0C 00 D2 72 88 65
0010 | 14 00 00 00 F1 8E 7E BE 6E C7 B1 3C D3 A4 A2 1C
0020 | B4 BF 19 C9 E2 E5 85 26</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>A0EF07000B718865</code></td>
<td><code>F8F40C00D2728865</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>E9A95CF0487975624F9FA59355262658</code></td>
<td><code>6EC7B13CD3A4A21CB4BF19C9E2E58526</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 0C 23 AB 0B 71 88 65
0010 | 70 00 00 00 63 24 16 05 E9 A9 5C F0 48 79 75 62
0020 | 4F 9F A5 93 55 26 26 58 F2 A1 DD 5E 12 FD A6 19
0030 | 8A F1 36 63 69 C0 BD 38 08 1E 1E 4E 26 3A 9A B0
0040 | D9 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 1C A8 98 D2 72 88 65
0010 | 6C 00 00 00 63 24 16 05 6E C7 B1 3C D3 A4 A2 1C
0020 | B4 BF 19 C9 E2 E5 85 26 61 66 00 83 D3 C4 94 64
0030 | D9 58 BB 19 9D F5 09 CC 08 10 14 24 8D 5F 3B 4F
0040 | F3 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>010C23AB0B718865</code></td>
<td><code>011CA898D2728865</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>70000000</code> (112 in decimal)</td>
<td><code>6C000000</code> (108 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -150,19 +150,19 @@
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>E9A95CF0487975624F9FA59355262658</code></td>
<td><code>6EC7B13CD3A4A21CB4BF19C9E2E58526</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>F2A1DD5E12FDA6198AF1366369C0BD38</code></td>
<td><code>61660083D3C49464D958BB199DF509CC</code></td>
<td>Server-generated random number</td>
</tr>
<tr>
<td>pq</td>
<td>56, 12</td>
<td><code>081E1E4E263A9AB0D9000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2170257996538097881</td>
<td><code>081014248D5F3B4FF3000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1158591193747771379</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 = 2170257996538097881</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>2170257996538097881 = 1356114863 * 1600349687</code></p>
<pre><code>p = 1356114863
q = 1600349687</code></pre>
<pre><code>pq = 1158591193747771379</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>1158591193747771379 = 1057941503 * 1095137293</code></p>
<pre><code>p = 1057941503
q = 1095137293</code></pre>
<!-- end pq -->
<h4><a class="anchor" href="#presenting-proof-of-work-server-authentication" id="presenting-proof-of-work-server-authentication" name="presenting-proof-of-work-server-authentication"><i class="anchor-icon"></i></a>Presenting proof of work; Server authentication</h4>
<h5><a class="anchor" href="#4-encrypted-data-payload-generation" id="4-encrypted-data-payload-generation" name="4-encrypted-data-payload-generation"><i class="anchor-icon"></i></a>4) <code>encrypted_data</code> payload generation</h5>
<p>First of all, generate an <code>encrypted_data</code> payload as follows:</p>
<!-- start p_q_inner_data_dc -->
<p>Generated payload (excluding transport headers/trailers):</p>
<pre><code>0000 | 95 5F F5 A9 08 1E 1E 4E 26 3A 9A B0 D9 00 00 00
0010 | 04 50 D4 AB AF 00 00 00 04 5F 63 65 F7 00 00 00
0020 | E9 A9 5C F0 48 79 75 62 4F 9F A5 93 55 26 26 58
0030 | F2 A1 DD 5E 12 FD A6 19 8A F1 36 63 69 C0 BD 38
0040 | DD 9F 00 BF 8C 21 2D 1D 64 4A EF 29 1B BF 9E EB
0050 | 17 F0 51 C6 11 04 AA 24 F3 46 FE B9 F8 8F D1 B8
<pre><code>0000 | 95 5F F5 A9 08 10 14 24 8D 5F 3B 4F F3 00 00 00
0010 | 04 3F 0E E7 FF 00 00 00 04 41 46 78 0D 00 00 00
0020 | 6E C7 B1 3C D3 A4 A2 1C B4 BF 19 C9 E2 E5 85 26
0030 | 61 66 00 83 D3 C4 94 64 D9 58 BB 19 9D F5 09 CC
0040 | 2A 09 83 00 CC 18 26 26 89 BB 49 82 F3 2E 48 54
0050 | 53 B3 40 A6 DF 27 B5 85 AD 9E 53 60 72 71 E2 7C
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 = 1600349687</code></pre>
<tr>
<td>pq</td>
<td>4, 12</td>
<td><code>081E1E4E263A9AB0D9000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2170257996538097881</td>
<td><code>081014248D5F3B4FF3000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1158591193747771379</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>0450D4ABAF000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1356114863</td>
<td><code>043F0EE7FF000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1057941503</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>045F6365F7000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1600349687</td>
<td><code>044146780D000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1095137293</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>E9A95CF0487975624F9FA59355262658</code></td>
<td><code>6EC7B13CD3A4A21CB4BF19C9E2E58526</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>48, 16</td>
<td><code>F2A1DD5E12FDA6198AF1366369C0BD38</code></td>
<td><code>61660083D3C49464D958BB199DF509CC</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce</td>
<td>64, 32</td>
<td><code>DD9F00BF8C212D1D644AEF291BBF9EEB</code> <code>17F051C61104AA24F346FEB9F88FD1B8</code></td>
<td><code>2A098300CC18262689BB4982F32E4854</code> <code>53B340A6DF27B585AD9E53607271E27C</code></td>
<td>Client-generated random number</td>
</tr>
<tr>
@ -291,39 +291,39 @@ q = 1600349687</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 = 955FF5A9081E1E4E263A9AB0D90000000450D4ABAF000000045F6365F7000000E9A95CF0487975624F9FA59355262658F2A1DD5E12FDA6198AF1366369C0BD38DD9F00BF8C212D1D644AEF291BBF9EEB17F051C61104AA24F346FEB9F88FD1B802000000
random_padding_bytes = D9590C2E0B25ADB79B73125B7C00F467B7E039352D3196C1DEA1DFC72EB5AB4FBF1FC97EFFE4A4895F65BA3988EE57DFF55F633387CBA2EB3F6A2A673EDD70EAE93EEE60446ADC9998A689E18247980327FD592A6B8363289465ABAB</code></pre>
<pre><code>data = 955FF5A9081014248D5F3B4FF3000000043F0EE7FF000000044146780D0000006EC7B13CD3A4A21CB4BF19C9E2E5852661660083D3C49464D958BB199DF509CC2A098300CC18262689BB4982F32E485453B340A6DF27B585AD9E53607271E27C02000000
random_padding_bytes = 7B2BFCBB3D484B69436F87D7906192F63F7C7F816D2FBC27319D8A06916AA8E3F85FFF76E9613845A3862CF936C83305AEB481BA6F7F35CC46F7AA0C7E4C83BFAC6865EF71080E9A7D003C12318F2D64A59A09DCB71E59D055719CDA</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 = D3476A6B72B0C947F9373ED9A057CE0FB4A83DF72FFD06F560C9C40728F13BB5398B10A56DB8C8097CDC4202BC84F19AEB9665692D4218B07D7ACDA9FEE6C61567573D7591FA0DECB00F0E2E6F0272A23E4B694438239BDED0AEC0751DBBE0ED838C07CECA6210D646398B8BD9975CFD145CEB8609EDDB7B5722D22196279CE9862334877FCD24D9212B497ADAF7D8E2B5A7AB3F9283340B1988472E29F2EA69BF98AA5ABD43965294173D59BC4EE4CADEE4875A89E6D585393CB0C1151B0D6A7665874A62AD3E1167068E8DE40E0761838ABDD866DBD1C6C758F3896628FC3FD94C10C89115B44E68DC174F2F89C6A0DCE54CABCE74D0DB68D576A5F53CC9C5</code></pre>
<pre><code>encrypted_data = 704AC6A0E2B6EAA22EDA46243FED36E5047F1E563A93DB4B962D9FFB7249878093FF3E5461C14E858ABFF3F320B736D6E0BFDB7EAC36895F65E97A1F0D39DF4978FEDEE325E82733DC825732AAD911FE898AB728D92511CCC59B2068190F85AB2FC23DE1C88BBAD2F4F76131CE989EBF463363321E2DAB0185940E6132250F46D365344431E47AB78D556D8159790446550782DA27BE34223C3F784182B83358C010490321370DEF75655BAEBAC30D22F768227B5D99E5DB5B96226DBA8C0601ECAD773C112F87E74EE550B58EE32D53FB6F5EFD920D6E973E5A25D402016A05C4D635DD6547CB3F5AA29DCD347DCA24B5497EBBF7B0547C88BF038ECC234B67</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 A4 EF 07 00 0B 71 88 65
0010 | 40 01 00 00 BE E4 12 D7 E9 A9 5C F0 48 79 75 62
0020 | 4F 9F A5 93 55 26 26 58 F2 A1 DD 5E 12 FD A6 19
0030 | 8A F1 36 63 69 C0 BD 38 04 50 D4 AB AF 00 00 00
0040 | 04 5F 63 65 F7 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 D3 47 6A 6B 72 B0 C9 47 F9 37 3E D9
0060 | A0 57 CE 0F B4 A8 3D F7 2F FD 06 F5 60 C9 C4 07
0070 | 28 F1 3B B5 39 8B 10 A5 6D B8 C8 09 7C DC 42 02
0080 | BC 84 F1 9A EB 96 65 69 2D 42 18 B0 7D 7A CD A9
0090 | FE E6 C6 15 67 57 3D 75 91 FA 0D EC B0 0F 0E 2E
00A0 | 6F 02 72 A2 3E 4B 69 44 38 23 9B DE D0 AE C0 75
00B0 | 1D BB E0 ED 83 8C 07 CE CA 62 10 D6 46 39 8B 8B
00C0 | D9 97 5C FD 14 5C EB 86 09 ED DB 7B 57 22 D2 21
00D0 | 96 27 9C E9 86 23 34 87 7F CD 24 D9 21 2B 49 7A
00E0 | DA F7 D8 E2 B5 A7 AB 3F 92 83 34 0B 19 88 47 2E
00F0 | 29 F2 EA 69 BF 98 AA 5A BD 43 96 52 94 17 3D 59
0100 | BC 4E E4 CA DE E4 87 5A 89 E6 D5 85 39 3C B0 C1
0110 | 15 1B 0D 6A 76 65 87 4A 62 AD 3E 11 67 06 8E 8D
0120 | E4 0E 07 61 83 8A BD D8 66 DB D1 C6 C7 58 F3 89
0130 | 66 28 FC 3F D9 4C 10 C8 91 15 B4 4E 68 DC 17 4F
0140 | 2F 89 C6 A0 DC E5 4C AB CE 74 D0 DB 68 D5 76 A5
0150 | F5 3C C9 C5</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 FC F4 0C 00 D2 72 88 65
0010 | 40 01 00 00 BE E4 12 D7 6E C7 B1 3C D3 A4 A2 1C
0020 | B4 BF 19 C9 E2 E5 85 26 61 66 00 83 D3 C4 94 64
0030 | D9 58 BB 19 9D F5 09 CC 04 3F 0E E7 FF 00 00 00
0040 | 04 41 46 78 0D 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 70 4A C6 A0 E2 B6 EA A2 2E DA 46 24
0060 | 3F ED 36 E5 04 7F 1E 56 3A 93 DB 4B 96 2D 9F FB
0070 | 72 49 87 80 93 FF 3E 54 61 C1 4E 85 8A BF F3 F3
0080 | 20 B7 36 D6 E0 BF DB 7E AC 36 89 5F 65 E9 7A 1F
0090 | 0D 39 DF 49 78 FE DE E3 25 E8 27 33 DC 82 57 32
00A0 | AA D9 11 FE 89 8A B7 28 D9 25 11 CC C5 9B 20 68
00B0 | 19 0F 85 AB 2F C2 3D E1 C8 8B BA D2 F4 F7 61 31
00C0 | CE 98 9E BF 46 33 63 32 1E 2D AB 01 85 94 0E 61
00D0 | 32 25 0F 46 D3 65 34 44 31 E4 7A B7 8D 55 6D 81
00E0 | 59 79 04 46 55 07 82 DA 27 BE 34 22 3C 3F 78 41
00F0 | 82 B8 33 58 C0 10 49 03 21 37 0D EF 75 65 5B AE
0100 | BA C3 0D 22 F7 68 22 7B 5D 99 E5 DB 5B 96 22 6D
0110 | BA 8C 06 01 EC AD 77 3C 11 2F 87 E7 4E E5 50 B5
0120 | 8E E3 2D 53 FB 6F 5E FD 92 0D 6E 97 3E 5A 25 D4
0130 | 02 01 6A 05 C4 D6 35 DD 65 47 CB 3F 5A A2 9D CD
0140 | 34 7D CA 24 B5 49 7E BB F7 B0 54 7C 88 BF 03 8E
0150 | CC 23 4B 67</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 = D9590C2E0B25ADB79B73125B7C00F467B7E039352D3196C1DEA1DFC72
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>A4EF07000B718865</code></td>
<td><code>FCF40C00D2728865</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 = D9590C2E0B25ADB79B73125B7C00F467B7E039352D3196C1DEA1DFC72
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>E9A95CF0487975624F9FA59355262658</code></td>
<td><code>6EC7B13CD3A4A21CB4BF19C9E2E58526</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>F2A1DD5E12FDA6198AF1366369C0BD38</code></td>
<td><code>61660083D3C49464D958BB199DF509CC</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>p</td>
<td>56, 8</td>
<td><code>0450D4ABAF000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1356114863</td>
<td><code>043F0EE7FF000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1057941503</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>045F6365F7000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1600349687</td>
<td><code>044146780D000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1095137293</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 = D9590C2E0B25ADB79B73125B7C00F467B7E039352D3196C1DEA1DFC72
<tr>
<td>encrypted_data</td>
<td>80, 260</td>
<td><code>FE000100D3476A6B72B0C947F9373ED9</code> <code>A057CE0FB4A83DF72FFD06F560C9C407</code> <code>28F13BB5398B10A56DB8C8097CDC4202</code> <code>BC84F19AEB9665692D4218B07D7ACDA9</code> <code>FEE6C61567573D7591FA0DECB00F0E2E</code> <code>6F0272A23E4B694438239BDED0AEC075</code> <code>1DBBE0ED838C07CECA6210D646398B8B</code> <code>D9975CFD145CEB8609EDDB7B5722D221</code> <code>96279CE9862334877FCD24D9212B497A</code> <code>DAF7D8E2B5A7AB3F9283340B1988472E</code> <code>29F2EA69BF98AA5ABD43965294173D59</code> <code>BC4EE4CADEE4875A89E6D585393CB0C1</code> <code>151B0D6A7665874A62AD3E1167068E8D</code> <code>E40E0761838ABDD866DBD1C6C758F389</code> <code>6628FC3FD94C10C89115B44E68DC174F</code> <code>2F89C6A0DCE54CABCE74D0DB68D576A5</code><br> <code>F53CC9C5</code></td>
<td><code>FE000100704AC6A0E2B6EAA22EDA4624</code> <code>3FED36E5047F1E563A93DB4B962D9FFB</code> <code>7249878093FF3E5461C14E858ABFF3F3</code> <code>20B736D6E0BFDB7EAC36895F65E97A1F</code> <code>0D39DF4978FEDEE325E82733DC825732</code> <code>AAD911FE898AB728D92511CCC59B2068</code> <code>190F85AB2FC23DE1C88BBAD2F4F76131</code> <code>CE989EBF463363321E2DAB0185940E61</code> <code>32250F46D365344431E47AB78D556D81</code> <code>59790446550782DA27BE34223C3F7841</code> <code>82B83358C010490321370DEF75655BAE</code> <code>BAC30D22F768227B5D99E5DB5B96226D</code> <code>BA8C0601ECAD773C112F87E74EE550B5</code> <code>8EE32D53FB6F5EFD920D6E973E5A25D4</code> <code>02016A05C4D635DD6547CB3F5AA29DCD</code> <code>347DCA24B5497EBBF7B0547C88BF038E</code><br> <code>CC234B67</code></td>
<td>Value generated above</td>
</tr>
</tbody>
@ -402,47 +402,47 @@ random_padding_bytes = D9590C2E0B25ADB79B73125B7C00F467B7E039352D3196C1DEA1DFC72
<h5><a class="anchor" href="#6-server-responds-with" id="6-server-responds-with" name="6-server-responds-with"><i class="anchor-icon"></i></a>6) Server responds with:</h5>
<!-- start server_DH_params_ok -->
<p>Received payload (excluding transport headers/trailers):</p>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 68 70 59 0C 71 88 65
0010 | D8 02 00 00 5C 07 E8 D0 E9 A9 5C F0 48 79 75 62
0020 | 4F 9F A5 93 55 26 26 58 F2 A1 DD 5E 12 FD A6 19
0030 | 8A F1 36 63 69 C0 BD 38 FE 50 02 00 15 93 0D 9C
0040 | D2 D3 5A 6B 7D 60 80 3F CD 53 26 BA B6 41 81 9B
0050 | 90 B4 55 07 1D 33 68 05 5A D4 7E 33 77 C5 68 9E
0060 | A8 8F FE B1 41 02 33 9D AE 0B 7C 4A E5 05 28 E9
0070 | ED D6 F7 8C 56 35 6C 0C 00 76 83 74 CF 79 F4 95
0080 | DC 2E 28 58 77 F3 74 26 37 10 9D 51 7F BC 3E 63
0090 | A2 FD 70 44 FF 62 69 5F 57 57 C7 AD D0 9D AC 5D
00A0 | BF 13 02 67 54 E2 80 A9 C0 AB B8 70 38 7D 28 E1
00B0 | 8E 32 D0 D5 F0 9C AD 50 DA 54 20 B2 A8 A0 A1 E4
00C0 | 4A 97 E4 92 E8 78 AC 46 C0 FC 2C 7A 95 19 29 0D
00D0 | 6C 35 0F 09 B6 98 5F AA 74 BA 81 84 E4 1B 2E 97
00E0 | 2E 73 A1 C8 3A 19 5D 0B D7 41 B9 1A 8F 8C E0 80
00F0 | A1 89 65 ED F0 6E 56 D4 7E BE 7B AB 8B 36 FB 49
0100 | A7 71 62 07 2C B3 EC FC 81 B2 AF A7 44 47 7A 64
0110 | ED 27 FC E5 5C FD 43 15 26 D9 78 21 54 0A 5B 09
0120 | CE 89 D6 32 CC 16 D8 60 B2 80 38 14 1C BA D5 EB
0130 | 69 91 CD E3 CE 49 B5 E9 D9 B1 BB F5 82 6A 67 1D
0140 | 54 40 52 21 FF C0 EA BB 87 75 95 D6 4A 3B 84 DA
0150 | 48 19 5B 08 FA 36 44 38 5B 38 1A A1 DC BD 3D F8
0160 | C5 A5 0B 16 98 2A F4 6D C9 1D BA 5F 81 41 35 8C
0170 | 06 50 01 E7 BD D5 21 39 0E 24 38 66 53 91 AA 0E
0180 | 05 20 35 1E 6A 9C 4A B6 28 55 5C 0B 2D 8F 88 AC
0190 | 38 48 8A 00 10 49 44 D0 AE B4 B8 8F 36 24 08 A7
01A0 | 7A C7 92 A9 74 23 B1 D8 36 89 F3 C8 CE 1E 02 EA
01B0 | 9B 35 42 DB 97 E4 C8 FB 5A 96 A8 65 C4 28 74 BD
01C0 | 0F C8 6C D6 5A 2D 11 C7 23 CF CC F9 BD FF 48 3F
01D0 | D0 E2 BD 75 3F 9B 6C 17 DA 33 82 10 5D 4E 12 49
01E0 | 98 EB BB 26 04 28 60 FE 0D E4 51 DE 5C 70 C9 D2
01F0 | 09 C8 ED 70 32 CD FB 03 BC DC 79 10 B3 02 38 5D
0200 | 6C 17 EA 71 45 F9 52 A5 0E CD FA 94 19 ED 81 68
0210 | F2 5D E9 DE 0D 2D DC 94 CF 47 13 EB 6B 07 01 99
0220 | FF 2C 41 D1 BD 41 CE 12 25 C3 C4 0B 2D 80 57 07
0230 | 0C 66 9A E8 ED E6 6F 3E 7D D8 30 50 39 A1 AB 17
0240 | 42 9B E7 52 AB 16 57 11 CB A9 13 FA 11 A6 18 AC
0250 | CC 8A 39 B9 E0 F4 B1 1C 17 4A 85 69 34 32 6E E1
0260 | 4F 1F 74 9E FF D6 66 57 F4 41 70 53 73 FB 60 6D
0270 | 46 1A 93 A0 59 AE ED 94 AB EB C8 30 DE 0C 0D B6
0280 | D3 D6 9B 57 31 E6 8F BE E3 21 C3 42</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 90 62 42 D3 72 88 65
0010 | 84 02 00 00 5C 07 E8 D0 6E C7 B1 3C D3 A4 A2 1C
0020 | B4 BF 19 C9 E2 E5 85 26 61 66 00 83 D3 C4 94 64
0030 | D9 58 BB 19 9D F5 09 CC FE 50 02 00 92 38 B0 50
0040 | 17 E2 E6 F6 43 19 05 A3 BE 0D 57 CF 9D 7C B4 CA
0050 | 1D 66 35 31 1D A5 D9 FD D1 07 3B 1F AB 57 CE 22
0060 | 2F 5E D4 31 E7 91 47 61 2F 9F 2A 08 ED C6 E6 BB
0070 | DE 0B 68 57 31 8E 52 CA C4 33 B5 99 42 45 E4 3A
0080 | 0F 12 9F AD E1 B2 F6 D4 48 CE 51 F9 07 85 E0 D9
0090 | 0F 53 C8 B1 B6 85 B8 11 F6 EB AB A1 D7 88 A8 96
00A0 | A2 1F F0 ED AF 5C 09 50 C6 E9 97 99 0E B9 BE C6
00B0 | BB A5 59 AD 74 4C BD 64 73 E8 31 DD 26 F3 94 D5
00C0 | BF 86 4F 1E 5C CF 0A E4 E9 E8 0E CB 5D C4 8C 67
00D0 | 20 43 C2 5C 41 04 74 64 2E DF 60 C3 07 17 CC BA
00E0 | 9F 03 FB 9F 2E 8E 9C A9 E8 EC F3 95 2A 09 37 AF
00F0 | 6F 6F EC 71 8F E1 1C B2 F4 F7 06 48 F9 8E CA D6
0100 | F6 9D F6 A1 73 BB E5 1D 1B C5 39 4B C3 38 12 AB
0110 | ED C6 FA FD D1 92 35 D4 C0 F8 2B B4 9A 3E 26 15
0120 | 21 A4 A1 EB 50 C6 60 C9 38 AB 76 47 97 52 2C DF
0130 | 03 44 FB 4E CE D3 48 A2 AC AB B3 4A A8 B8 88 47
0140 | 32 D0 56 0C 04 65 08 F5 39 0E 64 7D B6 63 D4 5E
0150 | D0 92 A0 E1 3F 00 31 E8 B1 7D 6D 30 65 78 BC 10
0160 | B6 B6 C0 D8 AB 4A 1B 47 7B 17 6D AE AE 08 0C F8
0170 | 69 7B C6 18 90 CD 44 97 F9 BD 63 99 5A BB 51 12
0180 | 7D 78 82 17 84 AE 5E 29 ED 42 2C 3D A8 A8 B1 46
0190 | 6A F5 D1 5E 21 7F 89 EB 3E BC 49 98 F5 3D E6 6B
01A0 | 45 57 DC 55 4A C3 60 CF 25 16 08 4A 75 5D F0 55
01B0 | 72 CB 05 70 6E 95 1C A1 93 89 78 08 EF E8 79 7E
01C0 | 88 2F 02 6E 3E 43 B6 CB F0 59 F0 46 CD 04 4D A8
01D0 | C1 23 41 37 3E EC 1D 4B 60 3C E8 C9 10 04 FE CF
01E0 | 30 C9 E1 B7 72 E5 49 B9 B4 9E 54 9A 3D 3C 2C 33
01F0 | B4 21 C0 A0 A6 5C F8 5F 75 14 86 FC 61 E4 4E 04
0200 | 4E 7B E3 B6 BD 84 82 27 AE 83 54 7C 10 91 4A 02
0210 | F8 E7 6F 3F 08 FE 14 61 86 D4 5B DC F3 E2 4C 9B
0220 | 6B DF C7 62 37 98 B8 13 4B E5 FC 40 62 D4 2E 52
0230 | AB 46 5B 2B 0D 9A CC 58 11 32 EB E7 1D 54 76 73
0240 | B0 8D 18 2F A1 4B 7A 71 98 C7 B6 1F C9 E8 D7 14
0250 | 15 50 07 94 A4 52 F6 A2 35 FE 16 47 92 6C B5 71
0260 | FF A3 56 DC EF B6 A5 FC D1 EE 87 FF D1 9F 91 84
0270 | E6 68 1C 1E 49 4D E0 9E EA 90 CF AB 27 A2 28 DD
0280 | 6A 83 24 E8 AD F6 61 6B 61 28 52 8C</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 = D9590C2E0B25ADB79B73125B7C00F467B7E039352D3196C1DEA1DFC72
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>016870590C718865</code></td>
<td><code>01906242D3728865</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>D8020000</code> (728 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 = D9590C2E0B25ADB79B73125B7C00F467B7E039352D3196C1DEA1DFC72
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>E9A95CF0487975624F9FA59355262658</code></td>
<td><code>6EC7B13CD3A4A21CB4BF19C9E2E58526</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>F2A1DD5E12FDA6198AF1366369C0BD38</code></td>
<td><code>61660083D3C49464D958BB199DF509CC</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_answer</td>
<td>56, 596</td>
<td><code>FE50020015930D9CD2D35A6B7D60803F</code> <code>CD5326BAB641819B90B455071D336805</code> <code>5AD47E3377C5689EA88FFEB14102339D</code> <code>AE0B7C4AE50528E9EDD6F78C56356C0C</code> <code>00768374CF79F495DC2E285877F37426</code> <code>37109D517FBC3E63A2FD7044FF62695F</code> <code>5757C7ADD09DAC5DBF13026754E280A9</code> <code>C0ABB870387D28E18E32D0D5F09CAD50</code> <code>DA5420B2A8A0A1E44A97E492E878AC46</code> <code>C0FC2C7A9519290D6C350F09B6985FAA</code> <code>74BA8184E41B2E972E73A1C83A195D0B</code> <code>D741B91A8F8CE080A18965EDF06E56D4</code> <code>7EBE7BAB8B36FB49A77162072CB3ECFC</code> <code>81B2AFA744477A64ED27FCE55CFD4315</code> <code>26D97821540A5B09CE89D632CC16D860</code> <code>B28038141CBAD5EB6991CDE3CE49B5E9</code> <code>D9B1BBF5826A671D54405221FFC0EABB</code> <code>877595D64A3B84DA48195B08FA364438</code> <code>5B381AA1DCBD3DF8C5A50B16982AF46D</code> <code>C91DBA5F8141358C065001E7BDD52139</code> <code>0E2438665391AA0E0520351E6A9C4AB6</code> <code>28555C0B2D8F88AC38488A00104944D0</code> <code>AEB4B88F362408A77AC792A97423B1D8</code> <code>3689F3C8CE1E02EA9B3542DB97E4C8FB</code> <code>5A96A865C42874BD0FC86CD65A2D11C7</code> <code>23CFCCF9BDFF483FD0E2BD753F9B6C17</code> <code>DA3382105D4E124998EBBB26042860FE</code> <code>0DE451DE5C70C9D209C8ED7032CDFB03</code> <code>BCDC7910B302385D6C17EA7145F952A5</code> <code>0ECDFA9419ED8168F25DE9DE0D2DDC94</code> <code>CF4713EB6B070199FF2C41D1BD41CE12</code> <code>25C3C40B2D8057070C669AE8EDE66F3E</code> <code>7DD8305039A1AB17429BE752AB165711</code> <code>CBA913FA11A618ACCC8A39B9E0F4B11C</code> <code>174A856934326EE14F1F749EFFD66657</code> <code>F441705373FB606D461A93A059AEED94</code> <code>ABEBC830DE0C0DB6D3D69B5731E68FBE</code><br> <code>E321C342</code></td>
<td><code>FE5002009238B05017E2E6F6431905A3</code> <code>BE0D57CF9D7CB4CA1D6635311DA5D9FD</code> <code>D1073B1FAB57CE222F5ED431E7914761</code> <code>2F9F2A08EDC6E6BBDE0B6857318E52CA</code> <code>C433B5994245E43A0F129FADE1B2F6D4</code> <code>48CE51F90785E0D90F53C8B1B685B811</code> <code>F6EBABA1D788A896A21FF0EDAF5C0950</code> <code>C6E997990EB9BEC6BBA559AD744CBD64</code> <code>73E831DD26F394D5BF864F1E5CCF0AE4</code> <code>E9E80ECB5DC48C672043C25C41047464</code> <code>2EDF60C30717CCBA9F03FB9F2E8E9CA9</code> <code>E8ECF3952A0937AF6F6FEC718FE11CB2</code> <code>F4F70648F98ECAD6F69DF6A173BBE51D</code> <code>1BC5394BC33812ABEDC6FAFDD19235D4</code> <code>C0F82BB49A3E261521A4A1EB50C660C9</code> <code>38AB764797522CDF0344FB4ECED348A2</code> <code>ACABB34AA8B8884732D0560C046508F5</code> <code>390E647DB663D45ED092A0E13F0031E8</code> <code>B17D6D306578BC10B6B6C0D8AB4A1B47</code> <code>7B176DAEAE080CF8697BC61890CD4497</code> <code>F9BD63995ABB51127D78821784AE5E29</code> <code>ED422C3DA8A8B1466AF5D15E217F89EB</code> <code>3EBC4998F53DE66B4557DC554AC360CF</code> <code>2516084A755DF05572CB05706E951CA1</code> <code>93897808EFE8797E882F026E3E43B6CB</code> <code>F059F046CD044DA8C12341373EEC1D4B</code> <code>603CE8C91004FECF30C9E1B772E549B9</code> <code>B49E549A3D3C2C33B421C0A0A65CF85F</code> <code>751486FC61E44E044E7BE3B6BD848227</code> <code>AE83547C10914A02F8E76F3F08FE1461</code> <code>86D45BDCF3E24C9B6BDFC7623798B813</code> <code>4BE5FC4062D42E52AB465B2B0D9ACC58</code> <code>1132EBE71D547673B08D182FA14B7A71</code> <code>98C7B61FC9E8D71415500794A452F6A2</code> <code>35FE1647926CB571FFA356DCEFB6A5FC</code> <code>D1EE87FFD19F9184E6681C1E494DE09E</code> <code>EA90CFAB27A228DD6A8324E8ADF6616B</code><br> <code>6128528C</code></td>
<td>See below</td>
</tr>
</tbody>
@ -502,20 +502,20 @@ random_padding_bytes = D9590C2E0B25ADB79B73125B7C00F467B7E039352D3196C1DEA1DFC72
<!-- 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 = 15930D9CD2D35A6B7D60803FCD5326BAB641819B90B455071D3368055AD47E3377C5689EA88FFEB14102339DAE0B7C4AE50528E9EDD6F78C56356C0C00768374CF79F495DC2E285877F3742637109D517FBC3E63A2FD7044FF62695F5757C7ADD09DAC5DBF13026754E280A9C0ABB870387D28E18E32D0D5F09CAD50DA5420B2A8A0A1E44A97E492E878AC46C0FC2C7A9519290D6C350F09B6985FAA74BA8184E41B2E972E73A1C83A195D0BD741B91A8F8CE080A18965EDF06E56D47EBE7BAB8B36FB49A77162072CB3ECFC81B2AFA744477A64ED27FCE55CFD431526D97821540A5B09CE89D632CC16D860B28038141CBAD5EB6991CDE3CE49B5E9D9B1BBF5826A671D54405221FFC0EABB877595D64A3B84DA48195B08FA3644385B381AA1DCBD3DF8C5A50B16982AF46DC91DBA5F8141358C065001E7BDD521390E2438665391AA0E0520351E6A9C4AB628555C0B2D8F88AC38488A00104944D0AEB4B88F362408A77AC792A97423B1D83689F3C8CE1E02EA9B3542DB97E4C8FB5A96A865C42874BD0FC86CD65A2D11C723CFCCF9BDFF483FD0E2BD753F9B6C17DA3382105D4E124998EBBB26042860FE0DE451DE5C70C9D209C8ED7032CDFB03BCDC7910B302385D6C17EA7145F952A50ECDFA9419ED8168F25DE9DE0D2DDC94CF4713EB6B070199FF2C41D1BD41CE1225C3C40B2D8057070C669AE8EDE66F3E7DD8305039A1AB17429BE752AB165711CBA913FA11A618ACCC8A39B9E0F4B11C174A856934326EE14F1F749EFFD66657F441705373FB606D461A93A059AEED94ABEBC830DE0C0DB6D3D69B5731E68FBEE321C342
tmp_aes_key = D5584BCF5777990CB7FB90F7CD3FAE5635853CD460AE1FC4A85D97FBEAA23B22
tmp_aes_iv = EC1C42108FBC566B0751FA13B685AF7E81DC5CA95DF70BCCE8C4CFD0DD9F00BF</code></pre>
<pre><code>encrypted_answer = 9238B05017E2E6F6431905A3BE0D57CF9D7CB4CA1D6635311DA5D9FDD1073B1FAB57CE222F5ED431E79147612F9F2A08EDC6E6BBDE0B6857318E52CAC433B5994245E43A0F129FADE1B2F6D448CE51F90785E0D90F53C8B1B685B811F6EBABA1D788A896A21FF0EDAF5C0950C6E997990EB9BEC6BBA559AD744CBD6473E831DD26F394D5BF864F1E5CCF0AE4E9E80ECB5DC48C672043C25C410474642EDF60C30717CCBA9F03FB9F2E8E9CA9E8ECF3952A0937AF6F6FEC718FE11CB2F4F70648F98ECAD6F69DF6A173BBE51D1BC5394BC33812ABEDC6FAFDD19235D4C0F82BB49A3E261521A4A1EB50C660C938AB764797522CDF0344FB4ECED348A2ACABB34AA8B8884732D0560C046508F5390E647DB663D45ED092A0E13F0031E8B17D6D306578BC10B6B6C0D8AB4A1B477B176DAEAE080CF8697BC61890CD4497F9BD63995ABB51127D78821784AE5E29ED422C3DA8A8B1466AF5D15E217F89EB3EBC4998F53DE66B4557DC554AC360CF2516084A755DF05572CB05706E951CA193897808EFE8797E882F026E3E43B6CBF059F046CD044DA8C12341373EEC1D4B603CE8C91004FECF30C9E1B772E549B9B49E549A3D3C2C33B421C0A0A65CF85F751486FC61E44E044E7BE3B6BD848227AE83547C10914A02F8E76F3F08FE146186D45BDCF3E24C9B6BDFC7623798B8134BE5FC4062D42E52AB465B2B0D9ACC581132EBE71D547673B08D182FA14B7A7198C7B61FC9E8D71415500794A452F6A235FE1647926CB571FFA356DCEFB6A5FCD1EE87FFD19F9184E6681C1E494DE09EEA90CFAB27A228DD6A8324E8ADF6616B6128528C
tmp_aes_key = 2EB93B468D99A5AEAA2DBF4C20985C000A15B3DE2DF2CF889EAF0069A47A3DA0
tmp_aes_iv = 5B3F96022865729EC47801BB12F5F0233C4F6B81612E8E100F043FFA2A098300</code></pre>
<!-- end server_DH_inner_data_input -->
<p>Yielding:</p>
<!-- start server_DH_inner_data_output -->
<pre><code>answer_with_hash = 2F3349E2A541F04E00F1D21D8C0971B5729384A7BA0D89B5E9A95CF0487975624F9FA59355262658F2A1DD5E12FDA6198AF1366369C0BD3803000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE0001000804A0D7FF6AC9F253B89F796BC0C03FDE2863D645943825D3BC9327AA9E9CCB57C30BF43A64828F450E17C2F82B647CA86AEE8ECB67627C70CD273743AD97E5F09F8AFDBBD4E46893B85DCE7403BF611E3B2FE7C627EC793878A87F76C14E24EFF478253706769916FFD6031FCB0F9F9ED7C77556C7B66876411F21BCEAD8D8541374F9DE2F325AA1C3471280A2C84B66F7B6EB87B4FD3A7994DD5A1009E825F6C5D8B53B5D2E856B20637282448CABFD7CDC19635B0BE1D1F240FA5517CC62919E440CEFAD501BFEEE5D3B996A0E8E852D70CE80BF89662015053B5AA2DBED77DD5C2390161F13D3A7416340E09B30795DB0F8F32D29DA1F32DCA782F308900C71886520D8F1B4CFC79D46
answer = BA0D89B5E9A95CF0487975624F9FA59355262658F2A1DD5E12FDA6198AF1366369C0BD3803000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE0001000804A0D7FF6AC9F253B89F796BC0C03FDE2863D645943825D3BC9327AA9E9CCB57C30BF43A64828F450E17C2F82B647CA86AEE8ECB67627C70CD273743AD97E5F09F8AFDBBD4E46893B85DCE7403BF611E3B2FE7C627EC793878A87F76C14E24EFF478253706769916FFD6031FCB0F9F9ED7C77556C7B66876411F21BCEAD8D8541374F9DE2F325AA1C3471280A2C84B66F7B6EB87B4FD3A7994DD5A1009E825F6C5D8B53B5D2E856B20637282448CABFD7CDC19635B0BE1D1F240FA5517CC62919E440CEFAD501BFEEE5D3B996A0E8E852D70CE80BF89662015053B5AA2DBED77DD5C2390161F13D3A7416340E09B30795DB0F8F32D29DA1F32DCA782F308900C71886520D8F1B4CFC79D46</code></pre>
<pre><code>answer_with_hash = DC58A37596CF3D0D4643229465D6E0AE96F97D6DBA0D89B56EC7B13CD3A4A21CB4BF19C9E2E5852661660083D3C49464D958BB199DF509CC03000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100454BA7B9DCACEBA1FA919BBB2DD36C8DC572AF9B1EAA7CB6D3F1085B0661A934198258A893838709F0069DDB2593CE6D1754CC7C0617F2D51D746607B97BDD0A280085F96B567B34A2DBCACDFCD1B7EF3095259AAC205EC4EF9187D78DE979548A0FAA309E9A6E515CDFD6A42F23A512380D7530FE87B420557241829BEC16E443B7753276CC71E9186F8870E545B8CA11184FC5BEB056D4DAB29D79304ACCBF3C4C9B798BF490EDB1FB6BB74C5FDA260369FFC12E0D4CEE10DC186CEDE16FC0C1F97066830256BDB458EF54EAE81999E81D9A15F82A3062520631158E4385E9FA31FAE676027865EF46F22F3C8CE489C5E9325A1962B0A237197245827D592AD37288659F68EDD5DE024DE1
answer = BA0D89B56EC7B13CD3A4A21CB4BF19C9E2E5852661660083D3C49464D958BB199DF509CC03000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100454BA7B9DCACEBA1FA919BBB2DD36C8DC572AF9B1EAA7CB6D3F1085B0661A934198258A893838709F0069DDB2593CE6D1754CC7C0617F2D51D746607B97BDD0A280085F96B567B34A2DBCACDFCD1B7EF3095259AAC205EC4EF9187D78DE979548A0FAA309E9A6E515CDFD6A42F23A512380D7530FE87B420557241829BEC16E443B7753276CC71E9186F8870E545B8CA11184FC5BEB056D4DAB29D79304ACCBF3C4C9B798BF490EDB1FB6BB74C5FDA260369FFC12E0D4CEE10DC186CEDE16FC0C1F97066830256BDB458EF54EAE81999E81D9A15F82A3062520631158E4385E9FA31FAE676027865EF46F22F3C8CE489C5E9325A1962B0A237197245827D592AD37288659F68EDD5DE024DE1</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 E9 A9 5C F0 48 79 75 62 4F 9F A5 93
0010 | 55 26 26 58 F2 A1 DD 5E 12 FD A6 19 8A F1 36 63
0020 | 69 C0 BD 38 03 00 00 00 FE 00 01 00 C7 1C AE B9
<pre><code>0000 | BA 0D 89 B5 6E C7 B1 3C D3 A4 A2 1C B4 BF 19 C9
0010 | E2 E5 85 26 61 66 00 83 D3 C4 94 64 D9 58 BB 19
0020 | 9D F5 09 CC 03 00 00 00 FE 00 01 00 C7 1C AE B9
0030 | C6 B1 C9 04 8E 6C 52 2F 70 F1 3F 73 98 0D 40 23
0040 | 8E 3E 21 C1 49 34 D0 37 56 3D 93 0F 48 19 8A 0A
0050 | A7 C1 40 58 22 94 93 D2 25 30 F4 DB FA 33 6F 6E
@ -532,23 +532,23 @@ answer = BA0D89B5E9A95CF0487975624F9FA59355262658F2A1DD5E12FDA6198AF1366369C0BD3
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 | 08 04 A0 D7 FF 6A C9 F2 53 B8 9F 79 6B C0 C0 3F
0140 | DE 28 63 D6 45 94 38 25 D3 BC 93 27 AA 9E 9C CB
0150 | 57 C3 0B F4 3A 64 82 8F 45 0E 17 C2 F8 2B 64 7C
0160 | A8 6A EE 8E CB 67 62 7C 70 CD 27 37 43 AD 97 E5
0170 | F0 9F 8A FD BB D4 E4 68 93 B8 5D CE 74 03 BF 61
0180 | 1E 3B 2F E7 C6 27 EC 79 38 78 A8 7F 76 C1 4E 24
0190 | EF F4 78 25 37 06 76 99 16 FF D6 03 1F CB 0F 9F
01A0 | 9E D7 C7 75 56 C7 B6 68 76 41 1F 21 BC EA D8 D8
01B0 | 54 13 74 F9 DE 2F 32 5A A1 C3 47 12 80 A2 C8 4B
01C0 | 66 F7 B6 EB 87 B4 FD 3A 79 94 DD 5A 10 09 E8 25
01D0 | F6 C5 D8 B5 3B 5D 2E 85 6B 20 63 72 82 44 8C AB
01E0 | FD 7C DC 19 63 5B 0B E1 D1 F2 40 FA 55 17 CC 62
01F0 | 91 9E 44 0C EF AD 50 1B FE EE 5D 3B 99 6A 0E 8E
0200 | 85 2D 70 CE 80 BF 89 66 20 15 05 3B 5A A2 DB ED
0210 | 77 DD 5C 23 90 16 1F 13 D3 A7 41 63 40 E0 9B 30
0220 | 79 5D B0 F8 F3 2D 29 DA 1F 32 DC A7 82 F3 08 90
0230 | 0C 71 88 65</code></pre>
0130 | 45 4B A7 B9 DC AC EB A1 FA 91 9B BB 2D D3 6C 8D
0140 | C5 72 AF 9B 1E AA 7C B6 D3 F1 08 5B 06 61 A9 34
0150 | 19 82 58 A8 93 83 87 09 F0 06 9D DB 25 93 CE 6D
0160 | 17 54 CC 7C 06 17 F2 D5 1D 74 66 07 B9 7B DD 0A
0170 | 28 00 85 F9 6B 56 7B 34 A2 DB CA CD FC D1 B7 EF
0180 | 30 95 25 9A AC 20 5E C4 EF 91 87 D7 8D E9 79 54
0190 | 8A 0F AA 30 9E 9A 6E 51 5C DF D6 A4 2F 23 A5 12
01A0 | 38 0D 75 30 FE 87 B4 20 55 72 41 82 9B EC 16 E4
01B0 | 43 B7 75 32 76 CC 71 E9 18 6F 88 70 E5 45 B8 CA
01C0 | 11 18 4F C5 BE B0 56 D4 DA B2 9D 79 30 4A CC BF
01D0 | 3C 4C 9B 79 8B F4 90 ED B1 FB 6B B7 4C 5F DA 26
01E0 | 03 69 FF C1 2E 0D 4C EE 10 DC 18 6C ED E1 6F C0
01F0 | C1 F9 70 66 83 02 56 BD B4 58 EF 54 EA E8 19 99
0200 | E8 1D 9A 15 F8 2A 30 62 52 06 31 15 8E 43 85 E9
0210 | FA 31 FA E6 76 02 78 65 EF 46 F2 2F 3C 8C E4 89
0220 | C5 E9 32 5A 19 62 B0 A2 37 19 72 45 82 7D 59 2A
0230 | D3 72 88 65</code></pre>
<p>Payload (de)serialization:</p>
<pre><code>server_DH_inner_data#b5890dba nonce:int128 server_nonce:int128 g:int dh_prime:string g_a:string server_time:int = Server_DH_inner_data;</code></pre>
<table class="table">
@ -570,13 +570,13 @@ answer = BA0D89B5E9A95CF0487975624F9FA59355262658F2A1DD5E12FDA6198AF1366369C0BD3
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>E9A95CF0487975624F9FA59355262658</code></td>
<td><code>6EC7B13CD3A4A21CB4BF19C9E2E58526</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>F2A1DD5E12FDA6198AF1366369C0BD38</code></td>
<td><code>61660083D3C49464D958BB199DF509CC</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
@ -594,13 +594,13 @@ answer = BA0D89B5E9A95CF0487975624F9FA59355262658F2A1DD5E12FDA6198AF1366369C0BD3
<tr>
<td>g_a</td>
<td>300, 260</td>
<td><code>FE0001000804A0D7FF6AC9F253B89F79</code> <code>6BC0C03FDE2863D645943825D3BC9327</code> <code>AA9E9CCB57C30BF43A64828F450E17C2</code> <code>F82B647CA86AEE8ECB67627C70CD2737</code> <code>43AD97E5F09F8AFDBBD4E46893B85DCE</code> <code>7403BF611E3B2FE7C627EC793878A87F</code> <code>76C14E24EFF478253706769916FFD603</code> <code>1FCB0F9F9ED7C77556C7B66876411F21</code> <code>BCEAD8D8541374F9DE2F325AA1C34712</code> <code>80A2C84B66F7B6EB87B4FD3A7994DD5A</code> <code>1009E825F6C5D8B53B5D2E856B206372</code> <code>82448CABFD7CDC19635B0BE1D1F240FA</code> <code>5517CC62919E440CEFAD501BFEEE5D3B</code> <code>996A0E8E852D70CE80BF89662015053B</code> <code>5AA2DBED77DD5C2390161F13D3A74163</code> <code>40E09B30795DB0F8F32D29DA1F32DCA7</code><br> <code>82F30890</code></td>
<td><code>FE000100454BA7B9DCACEBA1FA919BBB</code> <code>2DD36C8DC572AF9B1EAA7CB6D3F1085B</code> <code>0661A934198258A893838709F0069DDB</code> <code>2593CE6D1754CC7C0617F2D51D746607</code> <code>B97BDD0A280085F96B567B34A2DBCACD</code> <code>FCD1B7EF3095259AAC205EC4EF9187D7</code> <code>8DE979548A0FAA309E9A6E515CDFD6A4</code> <code>2F23A512380D7530FE87B42055724182</code> <code>9BEC16E443B7753276CC71E9186F8870</code> <code>E545B8CA11184FC5BEB056D4DAB29D79</code> <code>304ACCBF3C4C9B798BF490EDB1FB6BB7</code> <code>4C5FDA260369FFC12E0D4CEE10DC186C</code> <code>EDE16FC0C1F97066830256BDB458EF54</code> <code>EAE81999E81D9A15F82A306252063115</code> <code>8E4385E9FA31FAE676027865EF46F22F</code> <code>3C8CE489C5E9325A1962B0A237197245</code><br> <code>827D592A</code></td>
<td><code>g_a</code> diffie-hellman parameter</td>
</tr>
<tr>
<td>server_time</td>
<td>560, 4</td>
<td><code>0C718865</code> (1703440652 in decimal)</td>
<td><code>D3728865</code> (1703441107 in decimal)</td>
<td>Server time</td>
</tr>
</tbody>
@ -609,34 +609,34 @@ answer = BA0D89B5E9A95CF0487975624F9FA59355262658F2A1DD5E12FDA6198AF1366369C0BD3
<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 = F0313C3418147FFFD95D0D9E6CB11C2547A2C1031839A196CB2345B80E0743D7B29FCE13EE02D62724776FF823B7DC3FC4875313179CBF638D3C975E8AF777305400190C72DCA8FB45352DC08DE0A5F91DFFC6F84A1D3DB13A2FC1703C550AB1C97E9B779AD3F88D1B1A870D9D3D75193D758CD5B208F27FF03D4959183931CFEA6976D1E653ECF7648A012D4DCFF3EAABA5D18E0E21F512409DE7C0EEB4B2B8D31377BE240D2AE3C31094DE5667CD5874EB85DCC73F2EB92F35A1AF67B4D77EBE0CAA07D732BCEBBA44A4DEE03AAB7D563F3B4D67AD2566BF379AF89E89C25E0EBC454A9AC3400C675E6894B34F26E29030C168DA0F20A1DC852266E41CB1CF</code></pre>
<pre><code>b = 9C9B71502AB0476C3767AC42CB8ABAEA63C64254139C9663DC1A992AA60FC5BBB04AF4060A657EA0C61AFF6AEA93D57DD118FFE4818C8D0937B7C88099F44046DE88C2DD6CE63245AD729E37B7351352DF6A89548D731118AEA3E5ED0F629EA7D93C1033970289C2D9C6BB435ED27CCFE76502E622FAD1B2AFCFDE3D71060231CF91043769B2F3E381E103B2F5EC711A6789AD0DACD65CBD63C464E1F95B1C62F535C78EE31693F8C0CFE85CFC0376485FAECAC24C60FDC84E7EECBA99B6289C8145962E1B5DA23A21106AF96DC24F132D82448FDED1A35B4A546180A52AD2B00D13AD91A8B5D05A50784AF5C8ADEDF10A522ED1A5A31AA79980E6523145AA53</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 = 7EDE2DAB34332592ED6D6D25FCC64C7F6181BEF686125EB13B87DCE59CD40BCCAD464081671F5A94E23FF4536069F7740E3B43925B4CDF9DC757C5F9D372CAC08EAACAB895C06704B20E142B7AC568D3370AC19D39FC6BBCB09A65938CDDFE88654C4837C5EFC9D84756A7110F686CE3645A393726ABDE438820D9B8D6E2DDD39A13725D3BE166042E9AC5B75B4731ECEC26E20ADF8D3EDD172E001F0A75B6056805526D8F1414BDE14F4E643E8272B7610239D7C34ED877E1A9B0890FEE6B5868851D82417EC107B0F730D0AD4753E910C02604F5BAF63D03F9E868903BAA4DC4B908D3B581A023906EC45C342CF1BD94C62D9D988345209AEE5A7E1ABE6364</code></pre>
<pre><code>g_b = 1002F3EE72B75CD121A05DD26CA4B81EC71251E9D9A2149D9F92698DCC6DA9E6F9AFE8F9BD1E6D194CABBE1056DF104E9F55F11E19CAF4DC3E2C40CFAD5AA62D247481504926DBE3B213079D8446EF08869E3204DBA25212FF2C16A408F265FB222AAF417D46ABBDD7248CAD32570B3B0404DE291BCE9474D5F6FC7EA025E2CE6DFEB87E50CCE27EF3F6B9FE5802D0EB3657DAF672B055E83338FC3A049915335E78D0856761947B04146FFA4017F11386B38026A3ABE8AB41CF2AC078AAA8011C4638A41EFB24F3EB10204651A51447A2E5D2A81E8162D90C34C6C47D984115D548D9B4EB26E190CCB2F3748F6386CB85230B7EA1D8033449DB62CBF7E38B40</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 E9 A9 5C F0 48 79 75 62 4F 9F A5 93
0010 | 55 26 26 58 F2 A1 DD 5E 12 FD A6 19 8A F1 36 63
0020 | 69 C0 BD 38 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | 7E DE 2D AB 34 33 25 92 ED 6D 6D 25 FC C6 4C 7F
0040 | 61 81 BE F6 86 12 5E B1 3B 87 DC E5 9C D4 0B CC
0050 | AD 46 40 81 67 1F 5A 94 E2 3F F4 53 60 69 F7 74
0060 | 0E 3B 43 92 5B 4C DF 9D C7 57 C5 F9 D3 72 CA C0
0070 | 8E AA CA B8 95 C0 67 04 B2 0E 14 2B 7A C5 68 D3
0080 | 37 0A C1 9D 39 FC 6B BC B0 9A 65 93 8C DD FE 88
0090 | 65 4C 48 37 C5 EF C9 D8 47 56 A7 11 0F 68 6C E3
00A0 | 64 5A 39 37 26 AB DE 43 88 20 D9 B8 D6 E2 DD D3
00B0 | 9A 13 72 5D 3B E1 66 04 2E 9A C5 B7 5B 47 31 EC
00C0 | EC 26 E2 0A DF 8D 3E DD 17 2E 00 1F 0A 75 B6 05
00D0 | 68 05 52 6D 8F 14 14 BD E1 4F 4E 64 3E 82 72 B7
00E0 | 61 02 39 D7 C3 4E D8 77 E1 A9 B0 89 0F EE 6B 58
00F0 | 68 85 1D 82 41 7E C1 07 B0 F7 30 D0 AD 47 53 E9
0100 | 10 C0 26 04 F5 BA F6 3D 03 F9 E8 68 90 3B AA 4D
0110 | C4 B9 08 D3 B5 81 A0 23 90 6E C4 5C 34 2C F1 BD
0120 | 94 C6 2D 9D 98 83 45 20 9A EE 5A 7E 1A BE 63 64</code></pre>
<pre><code>0000 | 54 B6 43 66 6E C7 B1 3C D3 A4 A2 1C B4 BF 19 C9
0010 | E2 E5 85 26 61 66 00 83 D3 C4 94 64 D9 58 BB 19
0020 | 9D F5 09 CC 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | 10 02 F3 EE 72 B7 5C D1 21 A0 5D D2 6C A4 B8 1E
0040 | C7 12 51 E9 D9 A2 14 9D 9F 92 69 8D CC 6D A9 E6
0050 | F9 AF E8 F9 BD 1E 6D 19 4C AB BE 10 56 DF 10 4E
0060 | 9F 55 F1 1E 19 CA F4 DC 3E 2C 40 CF AD 5A A6 2D
0070 | 24 74 81 50 49 26 DB E3 B2 13 07 9D 84 46 EF 08
0080 | 86 9E 32 04 DB A2 52 12 FF 2C 16 A4 08 F2 65 FB
0090 | 22 2A AF 41 7D 46 AB BD D7 24 8C AD 32 57 0B 3B
00A0 | 04 04 DE 29 1B CE 94 74 D5 F6 FC 7E A0 25 E2 CE
00B0 | 6D FE B8 7E 50 CC E2 7E F3 F6 B9 FE 58 02 D0 EB
00C0 | 36 57 DA F6 72 B0 55 E8 33 38 FC 3A 04 99 15 33
00D0 | 5E 78 D0 85 67 61 94 7B 04 14 6F FA 40 17 F1 13
00E0 | 86 B3 80 26 A3 AB E8 AB 41 CF 2A C0 78 AA A8 01
00F0 | 1C 46 38 A4 1E FB 24 F3 EB 10 20 46 51 A5 14 47
0100 | A2 E5 D2 A8 1E 81 62 D9 0C 34 C6 C4 7D 98 41 15
0110 | D5 48 D9 B4 EB 26 E1 90 CC B2 F3 74 8F 63 86 CB
0120 | 85 23 0B 7E A1 D8 03 34 49 DB 62 CB F7 E3 8B 40</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 = BA0D89B5E9A95CF0487975624F9FA59355262658F2A1DD5E12FDA6198AF1366369C0BD3
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>E9A95CF0487975624F9FA59355262658</code></td>
<td><code>6EC7B13CD3A4A21CB4BF19C9E2E58526</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>F2A1DD5E12FDA6198AF1366369C0BD38</code></td>
<td><code>61660083D3C49464D958BB199DF509CC</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>g_b</td>
<td>36, 260</td>
<td><code>FE0001007EDE2DAB34332592ED6D6D25</code> <code>FCC64C7F6181BEF686125EB13B87DCE5</code> <code>9CD40BCCAD464081671F5A94E23FF453</code> <code>6069F7740E3B43925B4CDF9DC757C5F9</code> <code>D372CAC08EAACAB895C06704B20E142B</code> <code>7AC568D3370AC19D39FC6BBCB09A6593</code> <code>8CDDFE88654C4837C5EFC9D84756A711</code> <code>0F686CE3645A393726ABDE438820D9B8</code> <code>D6E2DDD39A13725D3BE166042E9AC5B7</code> <code>5B4731ECEC26E20ADF8D3EDD172E001F</code> <code>0A75B6056805526D8F1414BDE14F4E64</code> <code>3E8272B7610239D7C34ED877E1A9B089</code> <code>0FEE6B5868851D82417EC107B0F730D0</code> <code>AD4753E910C02604F5BAF63D03F9E868</code> <code>903BAA4DC4B908D3B581A023906EC45C</code> <code>342CF1BD94C62D9D988345209AEE5A7E</code><br> <code>1ABE6364</code></td>
<td><code>FE0001001002F3EE72B75CD121A05DD2</code> <code>6CA4B81EC71251E9D9A2149D9F92698D</code> <code>CC6DA9E6F9AFE8F9BD1E6D194CABBE10</code> <code>56DF104E9F55F11E19CAF4DC3E2C40CF</code> <code>AD5AA62D247481504926DBE3B213079D</code> <code>8446EF08869E3204DBA25212FF2C16A4</code> <code>08F265FB222AAF417D46ABBDD7248CAD</code> <code>32570B3B0404DE291BCE9474D5F6FC7E</code> <code>A025E2CE6DFEB87E50CCE27EF3F6B9FE</code> <code>5802D0EB3657DAF672B055E83338FC3A</code> <code>049915335E78D0856761947B04146FFA</code> <code>4017F11386B38026A3ABE8AB41CF2AC0</code> <code>78AAA8011C4638A41EFB24F3EB102046</code> <code>51A51447A2E5D2A81E8162D90C34C6C4</code> <code>7D984115D548D9B4EB26E190CCB2F374</code> <code>8F6386CB85230B7EA1D8033449DB62CB</code><br> <code>F7E38B40</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 = BA0D89B5E9A95CF0487975624F9FA59355262658F2A1DD5E12FDA6198AF1366369C0BD3
<!-- 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 = 54B64366E9A95CF0487975624F9FA59355262658F2A1DD5E12FDA6198AF1366369C0BD380000000000000000FE0001007EDE2DAB34332592ED6D6D25FCC64C7F6181BEF686125EB13B87DCE59CD40BCCAD464081671F5A94E23FF4536069F7740E3B43925B4CDF9DC757C5F9D372CAC08EAACAB895C06704B20E142B7AC568D3370AC19D39FC6BBCB09A65938CDDFE88654C4837C5EFC9D84756A7110F686CE3645A393726ABDE438820D9B8D6E2DDD39A13725D3BE166042E9AC5B75B4731ECEC26E20ADF8D3EDD172E001F0A75B6056805526D8F1414BDE14F4E643E8272B7610239D7C34ED877E1A9B0890FEE6B5868851D82417EC107B0F730D0AD4753E910C02604F5BAF63D03F9E868903BAA4DC4B908D3B581A023906EC45C342CF1BD94C62D9D988345209AEE5A7E1ABE6364
padding = E2397B03564483A99EB2579F
tmp_aes_key = D5584BCF5777990CB7FB90F7CD3FAE5635853CD460AE1FC4A85D97FBEAA23B22
tmp_aes_iv = EC1C42108FBC566B0751FA13B685AF7E81DC5CA95DF70BCCE8C4CFD0DD9F00BF</code></pre>
<pre><code>data = 54B643666EC7B13CD3A4A21CB4BF19C9E2E5852661660083D3C49464D958BB199DF509CC0000000000000000FE0001001002F3EE72B75CD121A05DD26CA4B81EC71251E9D9A2149D9F92698DCC6DA9E6F9AFE8F9BD1E6D194CABBE1056DF104E9F55F11E19CAF4DC3E2C40CFAD5AA62D247481504926DBE3B213079D8446EF08869E3204DBA25212FF2C16A408F265FB222AAF417D46ABBDD7248CAD32570B3B0404DE291BCE9474D5F6FC7EA025E2CE6DFEB87E50CCE27EF3F6B9FE5802D0EB3657DAF672B055E83338FC3A049915335E78D0856761947B04146FFA4017F11386B38026A3ABE8AB41CF2AC078AAA8011C4638A41EFB24F3EB10204651A51447A2E5D2A81E8162D90C34C6C47D984115D548D9B4EB26E190CCB2F3748F6386CB85230B7EA1D8033449DB62CBF7E38B40
padding = 276B530AFF6FD1434B99D593
tmp_aes_key = 2EB93B468D99A5AEAA2DBF4C20985C000A15B3DE2DF2CF889EAF0069A47A3DA0
tmp_aes_iv = 5B3F96022865729EC47801BB12F5F0233C4F6B81612E8E100F043FFA2A098300</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 = 44FD3B2D8DB981FB6BF9132FB418E767DAD6BEBC6270CDC631A91ABCCAAD60987F41AFCF9A19BD914AE521BDDEB737899BFD386DD059208FEFD6CCAD53BE74DD8F25C79AA22315A3C889F3C0B6B42E34677F6F06A5331CC5CFE77AB309FA8C988D3F6AD682B35D9B1ACF6C525DB86C7C78AB693A16984D1FF5CBC0B260D554115718D27B204D8699115939041A21144FD5A3D29B019F9D931C16C991407B5E6BF6C4E5853921D0965DFDBB195DC4B14E06CBF82BC7413BD63F9FC763A5ACF8D5A05080E1DBBA492475E03CB49C4AA34D1D4C78D8411D73E7940EEBBDFCEBE90F4A66D1808DBBC3DB64607AD59C7162241C50D60A30DC26DD01A98E53CFBBFAD9C0D8C313E931D8F074E73E2BCC978FE9E0D1FFEFE6599253EE86ABCF4DB7FED98EF34814223A2E8B8528A7250A17C4F7D3223E42E61F5CAF24FAB845053281FB5DD49A7A969D9F5A6CCB6ACFFDCDD593</code></pre>
<pre><code>encrypted_data = 532CE13230083A7CAE015C625B8087F0D9B80C462136E684257A6D5D1A1B9B1E61CCC0AF77EE18127A16F661D3F2BDA58A7426AB8EB82B7FBF355A7B38C988FB7AB9412E8775E38D2DDF0297A7A95CEBEDE09F60B6E64A5C7744B08FA2A7EA22DDF69085A992769BCB2749C2658FACFD07DEB9CDD214B98BB13087418B15DC994BF6B9A0D5BECF3AE400F45B67873237B63CEE419A93EEEDA1F15F708382867090608F4EF9B3CDE442D0ADDB0C3EAA4B805EF5ABEC4FB980876C317A1AC0C0AAF11028678B72CCD9B63AE0D3068B7ED8D22A025604E31B6523D42DBA540ADBA48D3D4E9CEB4EE5F85487D9749B566630BA9F1B0E582DBDA5A2873719C1391431829743F96571889B3A6FD22532FA184C3BBF79D8A1D0F3A13355433AE9D2CE05773594C317DBABA3E763E97EBB1E5DA36D181A5A29533A38026E5EFEA02450D9FD18B1670ADADA09675670991198B893</code></pre>
<!-- end client_DH_inner_data_output -->
<p>The length of the final string is 336 bytes.</p>
<h6>7.2) set_client_DH_params query</h6>
<!-- start set_client_DH_params -->
<p>Sent payload (excluding transport headers/trailers):</p>
<pre><code>0000 | 00 00 00 00 00 00 00 00 CC 15 0B 00 0C 71 88 65
0010 | 78 01 00 00 1F 5F 04 F5 E9 A9 5C F0 48 79 75 62
0020 | 4F 9F A5 93 55 26 26 58 F2 A1 DD 5E 12 FD A6 19
0030 | 8A F1 36 63 69 C0 BD 38 FE 50 01 00 44 FD 3B 2D
0040 | 8D B9 81 FB 6B F9 13 2F B4 18 E7 67 DA D6 BE BC
0050 | 62 70 CD C6 31 A9 1A BC CA AD 60 98 7F 41 AF CF
0060 | 9A 19 BD 91 4A E5 21 BD DE B7 37 89 9B FD 38 6D
0070 | D0 59 20 8F EF D6 CC AD 53 BE 74 DD 8F 25 C7 9A
0080 | A2 23 15 A3 C8 89 F3 C0 B6 B4 2E 34 67 7F 6F 06
0090 | A5 33 1C C5 CF E7 7A B3 09 FA 8C 98 8D 3F 6A D6
00A0 | 82 B3 5D 9B 1A CF 6C 52 5D B8 6C 7C 78 AB 69 3A
00B0 | 16 98 4D 1F F5 CB C0 B2 60 D5 54 11 57 18 D2 7B
00C0 | 20 4D 86 99 11 59 39 04 1A 21 14 4F D5 A3 D2 9B
00D0 | 01 9F 9D 93 1C 16 C9 91 40 7B 5E 6B F6 C4 E5 85
00E0 | 39 21 D0 96 5D FD BB 19 5D C4 B1 4E 06 CB F8 2B
00F0 | C7 41 3B D6 3F 9F C7 63 A5 AC F8 D5 A0 50 80 E1
0100 | DB BA 49 24 75 E0 3C B4 9C 4A A3 4D 1D 4C 78 D8
0110 | 41 1D 73 E7 94 0E EB BD FC EB E9 0F 4A 66 D1 80
0120 | 8D BB C3 DB 64 60 7A D5 9C 71 62 24 1C 50 D6 0A
0130 | 30 DC 26 DD 01 A9 8E 53 CF BB FA D9 C0 D8 C3 13
0140 | E9 31 D8 F0 74 E7 3E 2B CC 97 8F E9 E0 D1 FF EF
0150 | E6 59 92 53 EE 86 AB CF 4D B7 FE D9 8E F3 48 14
0160 | 22 3A 2E 8B 85 28 A7 25 0A 17 C4 F7 D3 22 3E 42
0170 | E6 1F 5C AF 24 FA B8 45 05 32 81 FB 5D D4 9A 7A
0180 | 96 9D 9F 5A 6C CB 6A CF FD CD D5 93</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 C0 51 06 00 D3 72 88 65
0010 | 78 01 00 00 1F 5F 04 F5 6E C7 B1 3C D3 A4 A2 1C
0020 | B4 BF 19 C9 E2 E5 85 26 61 66 00 83 D3 C4 94 64
0030 | D9 58 BB 19 9D F5 09 CC FE 50 01 00 53 2C E1 32
0040 | 30 08 3A 7C AE 01 5C 62 5B 80 87 F0 D9 B8 0C 46
0050 | 21 36 E6 84 25 7A 6D 5D 1A 1B 9B 1E 61 CC C0 AF
0060 | 77 EE 18 12 7A 16 F6 61 D3 F2 BD A5 8A 74 26 AB
0070 | 8E B8 2B 7F BF 35 5A 7B 38 C9 88 FB 7A B9 41 2E
0080 | 87 75 E3 8D 2D DF 02 97 A7 A9 5C EB ED E0 9F 60
0090 | B6 E6 4A 5C 77 44 B0 8F A2 A7 EA 22 DD F6 90 85
00A0 | A9 92 76 9B CB 27 49 C2 65 8F AC FD 07 DE B9 CD
00B0 | D2 14 B9 8B B1 30 87 41 8B 15 DC 99 4B F6 B9 A0
00C0 | D5 BE CF 3A E4 00 F4 5B 67 87 32 37 B6 3C EE 41
00D0 | 9A 93 EE ED A1 F1 5F 70 83 82 86 70 90 60 8F 4E
00E0 | F9 B3 CD E4 42 D0 AD DB 0C 3E AA 4B 80 5E F5 AB
00F0 | EC 4F B9 80 87 6C 31 7A 1A C0 C0 AA F1 10 28 67
0100 | 8B 72 CC D9 B6 3A E0 D3 06 8B 7E D8 D2 2A 02 56
0110 | 04 E3 1B 65 23 D4 2D BA 54 0A DB A4 8D 3D 4E 9C
0120 | EB 4E E5 F8 54 87 D9 74 9B 56 66 30 BA 9F 1B 0E
0130 | 58 2D BD A5 A2 87 37 19 C1 39 14 31 82 97 43 F9
0140 | 65 71 88 9B 3A 6F D2 25 32 FA 18 4C 3B BF 79 D8
0150 | A1 D0 F3 A1 33 55 43 3A E9 D2 CE 05 77 35 94 C3
0160 | 17 DB AB A3 E7 63 E9 7E BB 1E 5D A3 6D 18 1A 5A
0170 | 29 53 3A 38 02 6E 5E FE A0 24 50 D9 FD 18 B1 67
0180 | 0A DA DA 09 67 56 70 99 11 98 B8 93</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>CC150B000C718865</code></td>
<td><code>C0510600D3728865</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>E9A95CF0487975624F9FA59355262658</code></td>
<td><code>6EC7B13CD3A4A21CB4BF19C9E2E58526</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>F2A1DD5E12FDA6198AF1366369C0BD38</code></td>
<td><code>61660083D3C49464D958BB199DF509CC</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_data</td>
<td>56, 340</td>
<td><code>FE50010044FD3B2D8DB981FB6BF9132F</code> <code>B418E767DAD6BEBC6270CDC631A91ABC</code> <code>CAAD60987F41AFCF9A19BD914AE521BD</code> <code>DEB737899BFD386DD059208FEFD6CCAD</code> <code>53BE74DD8F25C79AA22315A3C889F3C0</code> <code>B6B42E34677F6F06A5331CC5CFE77AB3</code> <code>09FA8C988D3F6AD682B35D9B1ACF6C52</code> <code>5DB86C7C78AB693A16984D1FF5CBC0B2</code> <code>60D554115718D27B204D869911593904</code> <code>1A21144FD5A3D29B019F9D931C16C991</code> <code>407B5E6BF6C4E5853921D0965DFDBB19</code> <code>5DC4B14E06CBF82BC7413BD63F9FC763</code> <code>A5ACF8D5A05080E1DBBA492475E03CB4</code> <code>9C4AA34D1D4C78D8411D73E7940EEBBD</code> <code>FCEBE90F4A66D1808DBBC3DB64607AD5</code> <code>9C7162241C50D60A30DC26DD01A98E53</code> <code>CFBBFAD9C0D8C313E931D8F074E73E2B</code> <code>CC978FE9E0D1FFEFE6599253EE86ABCF</code> <code>4DB7FED98EF34814223A2E8B8528A725</code> <code>0A17C4F7D3223E42E61F5CAF24FAB845</code> <code>053281FB5DD49A7A969D9F5A6CCB6ACF</code><br> <code>FDCDD593</code></td>
<td><code>FE500100532CE13230083A7CAE015C62</code> <code>5B8087F0D9B80C462136E684257A6D5D</code> <code>1A1B9B1E61CCC0AF77EE18127A16F661</code> <code>D3F2BDA58A7426AB8EB82B7FBF355A7B</code> <code>38C988FB7AB9412E8775E38D2DDF0297</code> <code>A7A95CEBEDE09F60B6E64A5C7744B08F</code> <code>A2A7EA22DDF69085A992769BCB2749C2</code> <code>658FACFD07DEB9CDD214B98BB1308741</code> <code>8B15DC994BF6B9A0D5BECF3AE400F45B</code> <code>67873237B63CEE419A93EEEDA1F15F70</code> <code>8382867090608F4EF9B3CDE442D0ADDB</code> <code>0C3EAA4B805EF5ABEC4FB980876C317A</code> <code>1AC0C0AAF11028678B72CCD9B63AE0D3</code> <code>068B7ED8D22A025604E31B6523D42DBA</code> <code>540ADBA48D3D4E9CEB4EE5F85487D974</code> <code>9B566630BA9F1B0E582DBDA5A2873719</code> <code>C1391431829743F96571889B3A6FD225</code> <code>32FA184C3BBF79D8A1D0F3A13355433A</code> <code>E9D2CE05773594C317DBABA3E763E97E</code> <code>BB1E5DA36D181A5A29533A38026E5EFE</code> <code>A02450D9FD18B1670ADADA0967567099</code><br> <code>1198B893</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 = 431578B02510B0396C0C03F9789AEE021F9CA817AD60BAE7EE2CE14B047EB7276E4733F42D655EBD492ACE24963B15FDB61EF051651284F679229A406A99B3C7F302E07C2E30F9B01732EDA7EBAFE22B7FDD4805E5D335C8ABE2F88A23AFEFBC59529BAEAE97B765AFC969DEB608ADC5F4702859D31D8D4F63313F0215648254C9A487CF220388A34B1DB7E9602127518F5DD85B8903C55C43D392090DC414F7D0268E584D9F115E5A54E487F5BE42FC45580676CB4AA4D56D529BFFEDD2075E936EDB19D0BE187E198625102CA209ACE3551EC51F0AD7A82EC500CE86EA3B317E5F8CF332F80CAD4B3CC61D1AC78FDACD64E4AF09B523940F12B1160B22A19E</code></pre>
<pre><code>auth_key = 88649449ACF10108F3AAB09F34D6EEFB6309AC5174DB60E7FBEAEB81851EDA233FCA507C0D02FA5C447CB452FE037C60AFD25B7323A288BD52AF461A0D8EDEA78FBD83B44BB09ABB8C7C3AD1484AFC5266C7F7AE42F32E2C7C00FFCD097A78B30408D6853F0A9883557DD75BC2E687884E2847E3A7D9D0F0DC76EFEF74688A770624F67E7661B8EDB7F07B5B7D6454A263F3F65398034E06E74E04B5AAFCAA9811C3AC1976F87E2D362F9BE6015FA3CA02F0D48B88C331AF34A2AC405CCC3E981FA76A5C3FE95225EA0C50F0F6A5352453F726AFF327A90CE5F21342F970927498C5AE32BBD1E7FCA834BF8B99FAC09682B5F8E3B1AEEA567ADF9E5E59271256</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 60 0E C2 0C 71 88 65
0010 | 78 00 00 00 34 F7 CB 3B E9 A9 5C F0 48 79 75 62
0020 | 4F 9F A5 93 55 26 26 58 F2 A1 DD 5E 12 FD A6 19
0030 | 8A F1 36 63 69 C0 BD 38 42 3D 2F FB 93 E1 6F C4
0040 | FA 01 DA FB ED C9 D5 BD</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 F0 78 96 D3 72 88 65
0010 | 80 00 00 00 34 F7 CB 3B 6E C7 B1 3C D3 A4 A2 1C
0020 | B4 BF 19 C9 E2 E5 85 26 61 66 00 83 D3 C4 94 64
0030 | D9 58 BB 19 9D F5 09 CC CA 8F 86 EE A0 1F 5B 34
0040 | 98 38 F2 09 1E 6F 3E EF</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>01600EC20C718865</code></td>
<td><code>01F07896D3728865</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>78000000</code> (120 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>E9A95CF0487975624F9FA59355262658</code></td>
<td><code>6EC7B13CD3A4A21CB4BF19C9E2E58526</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>F2A1DD5E12FDA6198AF1366369C0BD38</code></td>
<td><code>61660083D3C49464D958BB199DF509CC</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce_hash1</td>
<td>56, 16</td>
<td><code>423D2FFB93E16FC4FA01DAFBEDC9D5BD</code></td>
<td><code>CA8F86EEA01F5B349838F2091E6F3EEF</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>