Update content of files

This commit is contained in:
GitHub Action 2023-06-28 20:43:29 +00:00
parent 614ff88404
commit e867e19ab2

View file

@ -53,10 +53,10 @@ For example, for the abridged version of the transport », the…">
<h1><a class="anchor" href="#1-request-req-pq-multi" id="1-request-req-pq-multi" name="1-request-req-pq-multi"><i class="anchor-icon"></i></a>1. request req_pq_multi</h1>
<!-- start req_pq_multi -->
<p>Sent payload (excluding transport headers/trailers):</p>
<pre><code>0000 | 00 00 00 00 00 00 00 00 00 00 00 00 C4 90 9C 64
0010 | 14 00 00 00 F1 8E 7E BE DF D6 01 C3 D4 AD 9E 9F
0020 | 59 2A 9E 0E 97 B3 E6 03</code></pre>
<p>Payload serialization:</p>
<pre><code>0000 | 00 00 00 00 00 00 00 00 00 00 00 00 58 9A 9C 64
0010 | 14 00 00 00 F1 8E 7E BE 61 07 9B D3 CE 40 0A AA
0020 | C0 6A 7E C0 F9 E7 0A F2</code></pre>
<p>Payload (de)serialization:</p>
<pre><code>req_pq_multi#be7e8ef1 nonce:int128 = ResPQ;</code></pre>
<table class="table">
<thead>
@ -77,7 +77,7 @@ For example, for the abridged version of the transport », the…">
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>00000000C4909C64</code></td>
<td><code>00000000589A9C64</code></td>
<td>Exact <code>unixtime*2^32</code>, <code>+(4*N)</code> if N messages with the same message ID were already generated</td>
</tr>
<tr>
@ -95,7 +95,7 @@ For example, for the abridged version of the transport », the…">
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>DFD601C3D4AD9E9F592A9E0E97B3E603</code></td>
<td><code>61079BD3CE400AAAC06A7EC0F9E70AF2</code></td>
<td>Random number</td>
</tr>
</tbody>
@ -104,14 +104,14 @@ For example, for the abridged version of the transport », the…">
<h1><a class="anchor" href="#2-response-respq" id="2-response-respq" name="2-response-respq"><i class="anchor-icon"></i></a>2. response respq</h1>
<!-- start resPQ -->
<p>Received payload (excluding transport headers/trailers):</p>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 84 C1 D8 C4 90 9C 64
0010 | 5C 00 00 00 63 24 16 05 DF D6 01 C3 D4 AD 9E 9F
0020 | 59 2A 9E 0E 97 B3 E6 03 74 8B 67 63 BB E5 93 96
0030 | D6 24 9A 28 79 1F F0 70 08 1B 0A 05 21 4E 98 91
0040 | CB 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 68 EB F7 58 9A 9C 64
0010 | 7C 00 00 00 63 24 16 05 61 07 9B D3 CE 40 0A AA
0020 | C0 6A 7E C0 F9 E7 0A F2 F3 3B CB F4 A8 C2 3D 6A
0030 | EE 2D 08 5D 77 13 F5 B1 08 14 E0 52 91 6A AF 01
0040 | 01 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 serialization:</p>
<p>Payload (de)serialization:</p>
<pre><code>resPQ#05162463 nonce:int128 server_nonce:int128 pq:string server_public_key_fingerprints:Vector&lt;long&gt; = ResPQ;</code></pre>
<table class="table">
<thead>
@ -132,13 +132,13 @@ For example, for the abridged version of the transport », the…">
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>0184C1D8C4909C64</code></td>
<td><code>0168EBF7589A9C64</code></td>
<td>Exact <code>unixtime*2^32</code>, <code>+(4*N)</code> if N messages with the same message ID were already generated</td>
</tr>
<tr>
<td>message_length</td>
<td>16, 4</td>
<td><code>5C000000</code> (92 in decimal)</td>
<td><code>7C000000</code> (124 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -150,19 +150,19 @@ For example, for the abridged version of the transport », the…">
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>DFD601C3D4AD9E9F592A9E0E97B3E603</code></td>
<td><code>61079BD3CE400AAAC06A7EC0F9E70AF2</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>748B6763BBE59396D6249A28791FF070</code></td>
<td><code>F33BCBF4A8C23D6AEE2D085D7713F5B1</code></td>
<td>Server-generated random number</td>
</tr>
<tr>
<td>pq</td>
<td>56, 12</td>
<td><code>081B0A05214E9891CB000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1948375429401842123</td>
<td><code>0814E052916AAF0101000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1504293060055335169</td>
<td>Single-byte prefix denoting length, an 8-byte string, and three bytes of padding</td>
</tr>
<tr>
@ -207,22 +207,22 @@ For example, for the abridged version of the transport », the…">
<!-- end fingerprints -->
<h1><a class="anchor" href="#21-decompose-p-and-q" id="21-decompose-p-and-q" name="21-decompose-p-and-q"><i class="anchor-icon"></i></a>2.1. decompose p and q</h1>
<!-- start pq -->
<pre><code>pq = 1948375429401842123</code></pre>
<p>Decompose into 2 prime cofactors: <code>1272587959 * 1531033997 = 1948375429401842123</code></p>
<pre><code>p = 1272587959
q = 1531033997</code></pre>
<pre><code>pq = 1504293060055335169</code></pre>
<p>Decompose into 2 prime cofactors: <code>1504293060055335169 = 1019397109 * 1475669341</code></p>
<pre><code>p = 1019397109
q = 1475669341</code></pre>
<!-- end pq -->
<h1><a class="anchor" href="#22-encrypted-data-generation" id="22-encrypted-data-generation" name="22-encrypted-data-generation"><i class="anchor-icon"></i></a>2.2. encrypted_data generation</h1>
<!-- start p_q_inner_data_dc -->
<p>Generated payload (excluding transport headers/trailers):</p>
<pre><code>0000 | 95 5F F5 A9 08 1B 0A 05 21 4E 98 91 CB 00 00 00
0010 | 04 4B DA 26 B7 00 00 00 04 5B 41 B9 8D 00 00 00
0020 | DF D6 01 C3 D4 AD 9E 9F 59 2A 9E 0E 97 B3 E6 03
0030 | 74 8B 67 63 BB E5 93 96 D6 24 9A 28 79 1F F0 70
0040 | 16 CE AD 6A 85 3A 5B C4 68 E8 1E 7C 54 EC 20 97
0050 | C8 95 5D 1C C6 1F 6B 5F 13 4E 56 46 78 4C C0 81
<pre><code>0000 | 95 5F F5 A9 08 14 E0 52 91 6A AF 01 01 00 00 00
0010 | 04 3C C2 C3 F5 00 00 00 04 57 F4 ED 5D 00 00 00
0020 | 61 07 9B D3 CE 40 0A AA C0 6A 7E C0 F9 E7 0A F2
0030 | F3 3B CB F4 A8 C2 3D 6A EE 2D 08 5D 77 13 F5 B1
0040 | 77 C0 A6 8B C9 A6 9D B0 E0 49 94 75 DD 0E ED 08
0050 | 0B F0 59 CA 67 9B A9 AB AC B5 BB CF 69 25 76 FA
0060 | 02 00 00 00</code></pre>
<p>Payload serialization:</p>
<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;
p_q_inner_data_temp_dc#56fddf88 pq:string p:string q:string nonce:int128 server_nonce:int128 new_nonce:int256 dc:int expires_in:int = P_Q_inner_data;
p_q_inner_data#83c95aec pq:string p:string q:string nonce:int128 server_nonce:int128 new_nonce:int256 = P_Q_inner_data;
@ -246,37 +246,37 @@ p_q_inner_data_temp#3c6a84d4 pq:string p:string q:string nonce:int128 server_non
<tr>
<td>pq</td>
<td>4, 12</td>
<td><code>081B0A05214E9891CB000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1948375429401842123</td>
<td><code>0814E052916AAF0101000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1504293060055335169</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>044BDA26B7000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1272587959</td>
<td><code>043CC2C3F5000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1019397109</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>045B41B98D000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1531033997</td>
<td><code>0457F4ED5D000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1475669341</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>DFD601C3D4AD9E9F592A9E0E97B3E603</code></td>
<td><code>61079BD3CE400AAAC06A7EC0F9E70AF2</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>48, 16</td>
<td><code>748B6763BBE59396D6249A28791FF070</code></td>
<td><code>F33BCBF4A8C23D6AEE2D085D7713F5B1</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce</td>
<td>64, 32</td>
<td><code>16CEAD6A853A5BC468E81E7C54EC2097</code> <code>C8955D1CC61F6B5F134E5646784CC081</code></td>
<td><code>77C0A68BC9A69DB0E0499475DD0EED08</code> <code>0BF059CA679BA9ABACB5BBCF692576FA</code></td>
<td>Client-generated random number</td>
</tr>
<tr>
@ -291,40 +291,40 @@ p_q_inner_data_temp#3c6a84d4 pq:string p:string q:string nonce:int128 server_non
<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 = 955FF5A9081B0A05214E9891CB000000044BDA26B7000000045B41B98D000000DFD601C3D4AD9E9F592A9E0E97B3E603748B6763BBE59396D6249A28791FF07016CEAD6A853A5BC468E81E7C54EC2097C8955D1CC61F6B5F134E5646784CC08102000000
random_padding_bytes = 0A82901E4C955DEF7CB1FF0A698F2E1AF69116524EA5E8DFCEC0A5EAE4536B99D061DA8BFF2103419464FD69303912D9D62F377CC3245D7347AA1D0F8F8FE881C97EE2DFB2BDBE2E2D88FAAE42594F29D1770E17B44CF4B67CB36486</code></pre>
<pre><code>data = 955FF5A90814E052916AAF0101000000043CC2C3F50000000457F4ED5D00000061079BD3CE400AAAC06A7EC0F9E70AF2F33BCBF4A8C23D6AEE2D085D7713F5B177C0A68BC9A69DB0E0499475DD0EED080BF059CA679BA9ABACB5BBCF692576FA02000000
random_padding_bytes = E5019A0D9F552D15ACB43E2264CD899B8F87534B8D3C6BD8DEBA75BBFD953DBD9141C0C87E30E96A343AAF4EA390489899E3325E01CC03C40198DDEA8CB382D6BCCB30380AD5FFA5AD054B2DC9BEB280C0039AF3C7DC0D6C62ED3703</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 = C7B379DAF991447C61EEE34A0138053144E1FDB4DDAFA91909DDF35EB762DC35D1DE3F147E4A6DC44B7088B13A68BA103C621149578590BDD22CBEC0A61014AFEEC51623362AEDA4349AE0F35594D8941775AB5E646CABB26A3214E7873C45830E4A64C722C7E60D17F95DF82ECA383183CA1BFAB4545F2706860F61B6372777A85EDF44783227E3821835C78603115369E2EC01E788CAB624426F73CD4B7BA1BCA9AC831A92FCA878BE701B12772DEF1A7B3854F70C96F3856B50B2CCF775E4F661790CFC3B44D415432E00D6D2A98BF9D709A2C6C43BD3014D5F81025D4A1B68977004708EF7CB3FAE68F4248F26A2C52AEBF18F48478451D7461D09024A10</code></pre>
<pre><code>encrypted_data = CFCCD0A2FE4CE6DA364CAD61560586C2A0481427128257864AF9BA9B047612F7030BECC81F3A911A8A9178E2EA0205297B3A70B9C4001273E817C289613DC2F80033EEE5B41ED7B6C8EBB2CDAAFBB1115B800F736D0B5651FD279F13D7E23B13365FBE0F561137D7D33A32BCD2FAEB8091FF528BEFD48EF6EAAB42BE1201E879259EC477AD033CBD13C2C1607F9EB61663CE372DD5E7999FC5F0CE6B7903AE812BDDA619551BFBE69218BEC7E550B2E5E8428C2C8AF615ACD34F53D25737B87280E28BB2157B34987C00C1F45D734D79364166BB1FA275DA0563DBE09EFBC03450450947196C526A580A09B25F4CB23786ABFB00862AE177183A9FADA88E86D3</code></pre>
<!-- end p_q_inner_data_output -->
<p>The length of the final string is 256 bytes.</p>
<h1><a class="anchor" href="#3-request-req-dh-params" id="3-request-req-dh-params" name="3-request-req-dh-params"><i class="anchor-icon"></i></a>3. request req_dh_params</h1>
<!-- start req_DH_params -->
<p>Sent payload (excluding transport headers/trailers):</p>
<pre><code>0000 | 00 00 00 00 00 00 00 00 04 00 00 00 C4 90 9C 64
0010 | 40 01 00 00 BE E4 12 D7 DF D6 01 C3 D4 AD 9E 9F
0020 | 59 2A 9E 0E 97 B3 E6 03 74 8B 67 63 BB E5 93 96
0030 | D6 24 9A 28 79 1F F0 70 04 4B DA 26 B7 00 00 00
0040 | 04 5B 41 B9 8D 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 C7 B3 79 DA F9 91 44 7C 61 EE E3 4A
0060 | 01 38 05 31 44 E1 FD B4 DD AF A9 19 09 DD F3 5E
0070 | B7 62 DC 35 D1 DE 3F 14 7E 4A 6D C4 4B 70 88 B1
0080 | 3A 68 BA 10 3C 62 11 49 57 85 90 BD D2 2C BE C0
0090 | A6 10 14 AF EE C5 16 23 36 2A ED A4 34 9A E0 F3
00A0 | 55 94 D8 94 17 75 AB 5E 64 6C AB B2 6A 32 14 E7
00B0 | 87 3C 45 83 0E 4A 64 C7 22 C7 E6 0D 17 F9 5D F8
00C0 | 2E CA 38 31 83 CA 1B FA B4 54 5F 27 06 86 0F 61
00D0 | B6 37 27 77 A8 5E DF 44 78 32 27 E3 82 18 35 C7
00E0 | 86 03 11 53 69 E2 EC 01 E7 88 CA B6 24 42 6F 73
00F0 | CD 4B 7B A1 BC A9 AC 83 1A 92 FC A8 78 BE 70 1B
0100 | 12 77 2D EF 1A 7B 38 54 F7 0C 96 F3 85 6B 50 B2
0110 | CC F7 75 E4 F6 61 79 0C FC 3B 44 D4 15 43 2E 00
0120 | D6 D2 A9 8B F9 D7 09 A2 C6 C4 3B D3 01 4D 5F 81
0130 | 02 5D 4A 1B 68 97 70 04 70 8E F7 CB 3F AE 68 F4
0140 | 24 8F 26 A2 C5 2A EB F1 8F 48 47 84 51 D7 46 1D
0150 | 09 02 4A 10</code></pre>
<p>Payload serialization:</p>
<pre><code>0000 | 00 00 00 00 00 00 00 00 00 00 00 00 59 9A 9C 64
0010 | 40 01 00 00 BE E4 12 D7 61 07 9B D3 CE 40 0A AA
0020 | C0 6A 7E C0 F9 E7 0A F2 F3 3B CB F4 A8 C2 3D 6A
0030 | EE 2D 08 5D 77 13 F5 B1 04 3C C2 C3 F5 00 00 00
0040 | 04 57 F4 ED 5D 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 CF CC D0 A2 FE 4C E6 DA 36 4C AD 61
0060 | 56 05 86 C2 A0 48 14 27 12 82 57 86 4A F9 BA 9B
0070 | 04 76 12 F7 03 0B EC C8 1F 3A 91 1A 8A 91 78 E2
0080 | EA 02 05 29 7B 3A 70 B9 C4 00 12 73 E8 17 C2 89
0090 | 61 3D C2 F8 00 33 EE E5 B4 1E D7 B6 C8 EB B2 CD
00A0 | AA FB B1 11 5B 80 0F 73 6D 0B 56 51 FD 27 9F 13
00B0 | D7 E2 3B 13 36 5F BE 0F 56 11 37 D7 D3 3A 32 BC
00C0 | D2 FA EB 80 91 FF 52 8B EF D4 8E F6 EA AB 42 BE
00D0 | 12 01 E8 79 25 9E C4 77 AD 03 3C BD 13 C2 C1 60
00E0 | 7F 9E B6 16 63 CE 37 2D D5 E7 99 9F C5 F0 CE 6B
00F0 | 79 03 AE 81 2B DD A6 19 55 1B FB E6 92 18 BE C7
0100 | E5 50 B2 E5 E8 42 8C 2C 8A F6 15 AC D3 4F 53 D2
0110 | 57 37 B8 72 80 E2 8B B2 15 7B 34 98 7C 00 C1 F4
0120 | 5D 73 4D 79 36 41 66 BB 1F A2 75 DA 05 63 DB E0
0130 | 9E FB C0 34 50 45 09 47 19 6C 52 6A 58 0A 09 B2
0140 | 5F 4C B2 37 86 AB FB 00 86 2A E1 77 18 3A 9F AD
0150 | A8 8E 86 D3</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">
<thead>
@ -345,7 +345,7 @@ random_padding_bytes = 0A82901E4C955DEF7CB1FF0A698F2E1AF69116524EA5E8DFCEC0A5EAE
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>04000000C4909C64</code></td>
<td><code>00000000599A9C64</code></td>
<td>Exact <code>unixtime*2^32</code>, <code>+(4*N)</code> if N messages with the same message ID were already generated</td>
</tr>
<tr>
@ -363,25 +363,25 @@ random_padding_bytes = 0A82901E4C955DEF7CB1FF0A698F2E1AF69116524EA5E8DFCEC0A5EAE
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>DFD601C3D4AD9E9F592A9E0E97B3E603</code></td>
<td><code>61079BD3CE400AAAC06A7EC0F9E70AF2</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>748B6763BBE59396D6249A28791FF070</code></td>
<td><code>F33BCBF4A8C23D6AEE2D085D7713F5B1</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>p</td>
<td>56, 8</td>
<td><code>044BDA26B7000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1272587959</td>
<td><code>043CC2C3F5000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1019397109</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>045B41B98D000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1531033997</td>
<td><code>0457F4ED5D000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1475669341</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 = 0A82901E4C955DEF7CB1FF0A698F2E1AF69116524EA5E8DFCEC0A5EAE
<tr>
<td>encrypted_data</td>
<td>80, 260</td>
<td><code>FE000100C7B379DAF991447C61EEE34A</code> <code>0138053144E1FDB4DDAFA91909DDF35E</code> <code>B762DC35D1DE3F147E4A6DC44B7088B1</code> <code>3A68BA103C621149578590BDD22CBEC0</code> <code>A61014AFEEC51623362AEDA4349AE0F3</code> <code>5594D8941775AB5E646CABB26A3214E7</code> <code>873C45830E4A64C722C7E60D17F95DF8</code> <code>2ECA383183CA1BFAB4545F2706860F61</code> <code>B6372777A85EDF44783227E3821835C7</code> <code>8603115369E2EC01E788CAB624426F73</code> <code>CD4B7BA1BCA9AC831A92FCA878BE701B</code> <code>12772DEF1A7B3854F70C96F3856B50B2</code> <code>CCF775E4F661790CFC3B44D415432E00</code> <code>D6D2A98BF9D709A2C6C43BD3014D5F81</code> <code>025D4A1B68977004708EF7CB3FAE68F4</code> <code>248F26A2C52AEBF18F48478451D7461D</code><br> <code>09024A10</code></td>
<td><code>FE000100CFCCD0A2FE4CE6DA364CAD61</code> <code>560586C2A0481427128257864AF9BA9B</code> <code>047612F7030BECC81F3A911A8A9178E2</code> <code>EA0205297B3A70B9C4001273E817C289</code> <code>613DC2F80033EEE5B41ED7B6C8EBB2CD</code> <code>AAFBB1115B800F736D0B5651FD279F13</code> <code>D7E23B13365FBE0F561137D7D33A32BC</code> <code>D2FAEB8091FF528BEFD48EF6EAAB42BE</code> <code>1201E879259EC477AD033CBD13C2C160</code> <code>7F9EB61663CE372DD5E7999FC5F0CE6B</code> <code>7903AE812BDDA619551BFBE69218BEC7</code> <code>E550B2E5E8428C2C8AF615ACD34F53D2</code> <code>5737B87280E28BB2157B34987C00C1F4</code> <code>5D734D79364166BB1FA275DA0563DBE0</code> <code>9EFBC03450450947196C526A580A09B2</code> <code>5F4CB23786ABFB00862AE177183A9FAD</code><br> <code>A88E86D3</code></td>
<td>See <a href="#generation-of-encrypted-data">Generation of encrypted_data »</a></td>
</tr>
</tbody>
@ -402,48 +402,48 @@ random_padding_bytes = 0A82901E4C955DEF7CB1FF0A698F2E1AF69116524EA5E8DFCEC0A5EAE
<h1><a class="anchor" href="#4-response-server-dh-params-ok" id="4-response-server-dh-params-ok" name="4-response-server-dh-params-ok"><i class="anchor-icon"></i></a>4. response server_dh_params_ok</h1>
<!-- 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 64 D0 69 C5 90 9C 64
0010 | C4 02 00 00 5C 07 E8 D0 DF D6 01 C3 D4 AD 9E 9F
0020 | 59 2A 9E 0E 97 B3 E6 03 74 8B 67 63 BB E5 93 96
0030 | D6 24 9A 28 79 1F F0 70 FE 50 02 00 94 1D B6 38
0040 | 9B B2 12 EE 21 EF DC 8F CB F2 2F 9D 12 85 3E 32
0050 | 0D CC C7 98 5D 4E E8 01 A5 B6 71 51 2E C6 22 83
0060 | 30 24 58 49 E5 D1 98 0A B5 D0 13 23 79 36 E7 61
0070 | 30 15 4D 9F 74 2C 8F 49 DB E6 CA B4 50 AC 88 A7
0080 | 4D 38 E7 E1 C1 77 E5 7E BB 4A A5 34 BA 93 DF 89
0090 | 23 BE 4B 1D 60 53 3A 5D DF 80 DD B6 6C E7 BA FA
00A0 | 64 8A 6B FC 79 B6 41 42 1B DD 30 B4 99 2F BB 18
00B0 | 71 F9 4C D8 6F 5C 49 53 E7 54 07 50 EF 5B 80 C0
00C0 | E3 4C A1 59 64 E8 F4 0D C8 7D 39 B6 A5 EC 27 0F
00D0 | FB 84 C7 76 8A FE 7C 03 A0 F2 36 77 28 68 7C 36
00E0 | 42 CE A7 32 51 75 4A C0 28 55 6A ED D2 83 FF 18
00F0 | DB 65 A2 D6 B0 A8 0B 93 F2 ED B5 64 4A BD 97 76
0100 | 2A 5D E6 44 9E 29 C9 DA 78 EF EA EB F0 F6 C9 7E
0110 | 2F 52 F9 9E 99 C9 B8 61 7D 8B B5 BF 76 9F 4B F4
0120 | 29 E6 32 F4 64 D1 C6 55 97 F3 92 B1 19 00 BE 6C
0130 | 78 D2 1C F1 BA BC 49 91 F0 BA 55 7A 57 FF EA 04
0140 | 16 09 E5 03 85 6B FF FD F7 3D 2A 20 39 20 39 C1
0150 | EB 8E 21 A3 BA 95 CC 85 26 7D 00 49 9B 63 9A B2
0160 | F7 34 5E 92 76 D4 20 6C 15 1C 2A A3 A0 00 01 6D
0170 | B8 30 9A 5F 54 E2 65 A6 F4 BE AC 0B DB 48 6D 2A
0180 | CD 53 9C 1D D1 0E 5F 74 96 58 2A 52 48 CD D7 DD
0190 | C8 E6 D4 94 CB 7B BD A2 E9 C7 40 2C 32 70 03 B9
01A0 | 2D 7A A8 BB 77 95 1F D5 83 C1 48 E3 C5 DC 82 C0
01B0 | EE 0C 11 F0 E6 B2 59 0F 3A 13 49 D9 07 6C DE 62
01C0 | C3 A1 62 BA 0E FD 90 60 EC 7F B8 FE F9 DA AB FF
01D0 | F8 6D 4F DC 56 79 CF F1 65 C9 33 DF BF 81 C2 5F
01E0 | 6E DC B2 87 30 17 95 60 A9 34 27 2A 94 4A 64 A2
01F0 | 87 B1 01 ED 18 E8 B0 12 1C 24 EB F6 C0 53 A0 F7
0200 | FB 38 95 8F CC 63 60 D5 2F 66 70 14 99 01 6C 18
0210 | 36 3A 95 D3 AA C8 32 1E ED 62 09 FD 54 B8 6E 13
0220 | 61 E6 CA 2B BE F6 03 C6 6D 4E 8C 73 2D D9 1B EA
0230 | 01 19 13 44 0E 94 77 11 A4 7D 05 2C C7 DB EB 3C
0240 | 4E FF 09 F8 1F C3 8F CD 34 9A E7 9E CE 98 51 AC
0250 | 8F A5 61 1C DC D8 07 85 DD 7F 50 EE 2A 65 2D 32
0260 | E3 D0 FD D6 D9 A7 D1 17 14 B0 4F 6D 4F 50 7F 5B
0270 | E5 04 2C 24 A7 B9 21 AB 1B 1D 0E 8B 3A D2 77 18
0280 | F7 19 8C 34 D9 EA CA 57 E7 95 AC 60</code></pre>
<p>Payload serialization:</p>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 64 79 85 59 9A 9C 64
0010 | E8 02 00 00 5C 07 E8 D0 61 07 9B D3 CE 40 0A AA
0020 | C0 6A 7E C0 F9 E7 0A F2 F3 3B CB F4 A8 C2 3D 6A
0030 | EE 2D 08 5D 77 13 F5 B1 FE 50 02 00 F1 B0 F8 E0
0040 | E2 34 D3 3F 9E 48 D8 71 E1 2F C9 0C E8 8E A5 36
0050 | E0 A5 61 EE 54 63 15 8E 72 20 8C F7 90 CD AD 29
0060 | A3 31 6D D8 F3 6F B9 4C DD 11 9B D7 7B 4C 7A 62
0070 | EF BC 3E 6E DC 40 10 E8 9E 72 08 65 1C 72 62 15
0080 | 5C 79 1F 23 52 EB F9 7F C6 88 3C 59 BB 94 03 3E
0090 | DE 00 6E 25 2C 46 FA 2F 7B 0B CA C6 35 4A F4 23
00A0 | 87 3F 70 5B DE 51 AC 92 4F 1B 59 25 8C DB 03 AB
00B0 | CA 67 AD 5B 2F F1 84 7C F5 DB 3F 0F 0A 65 52 5D
00C0 | EA B4 E0 FE A2 B3 BD F7 CB 47 52 15 CF CB BF 07
00D0 | 82 14 4B 7A 09 15 3A F9 AC B6 37 AC 8C 37 38 97
00E0 | 7A 48 0A 1C 36 7F 13 95 40 43 40 E9 34 F6 46 28
00F0 | C1 7C D3 3F E5 FD CB 36 26 38 AD C4 18 34 CE B6
0100 | B4 3C 25 F8 07 25 93 D2 17 2F B2 93 1A E1 D7 4D
0110 | 5F 62 49 3A 29 EC 52 B3 1C 91 19 56 AD 8B 10 57
0120 | CE AB 92 0B A1 02 A7 0D B6 78 A1 FE 5D 5A 7A 42
0130 | 87 16 F5 CC 06 3E BB EC F6 77 6A F4 AE 2D D2 E2
0140 | BA CB A2 82 40 B9 0E 26 76 B0 5C E2 7F 39 12 75
0150 | 10 44 12 A6 5E 5B 56 FC 74 1B 62 FE A8 BA 1D 61
0160 | 2C F1 FF 83 AE 51 32 26 42 B6 2B 60 58 25 84 D2
0170 | 45 9C 94 6A 49 72 25 C7 55 C0 3C A5 21 9C FA 50
0180 | F9 00 68 5C FD 26 D7 5E 11 26 7F F4 82 A3 CE A1
0190 | DC 50 FA B8 7E 08 CB 91 4F A4 F6 58 3A 1A 69 10
01A0 | 4E 03 4D BA 05 46 70 F2 2A D2 66 FE 80 0D 87 24
01B0 | 28 B5 16 5D C5 4D 87 FF E9 92 D3 1B 25 A0 E0 4F
01C0 | FC 70 08 D7 E5 BE 02 24 30 63 03 30 D3 65 D7 B2
01D0 | 8D 33 EC 8F 54 D4 DF 5C 5E D0 D9 E8 A1 75 35 C8
01E0 | A0 3B 25 F4 B2 97 D4 EC 03 6D 6A EE DF 84 65 3E
01F0 | 63 DD DE E7 A2 B9 1A 0F 0C 24 64 FE 56 CD 63 D6
0200 | 43 15 F7 7D DF 6B 44 29 E6 C1 EC 71 69 FC 1F 74
0210 | 96 31 54 73 8E 34 DF 12 01 E6 8B D0 3B 5D 7C BC
0220 | C6 D7 E2 82 0C 4C 05 B5 1A F1 67 43 7E 42 63 E2
0230 | 43 E4 52 93 24 6A C6 3C 3B 7A EE 5D F2 95 63 85
0240 | 38 21 61 C8 76 D7 81 22 84 5E 70 BF 4A 37 C1 48
0250 | E3 CB EF 47 49 FE 92 E6 6B 9D BA 10 32 1B EA F7
0260 | 72 81 89 CD CE 8A 0D 80 54 8F A1 6A 36 9A 8F 66
0270 | 89 B6 E2 FC E5 65 20 C4 95 14 22 F2 B2 13 D9 17
0280 | A5 6F F9 4F 4D 91 BB 96 86 7A 87 61</code></pre>
<p>Payload (de)serialization:</p>
<pre><code>server_DH_params_fail#79cb045d nonce:int128 server_nonce:int128 new_nonce_hash:int128 = Server_DH_Params;
server_DH_params_ok#d0e8075c nonce:int128 server_nonce:int128 encrypted_answer:string = Server_DH_Params;</code></pre>
<table class="table">
@ -465,13 +465,13 @@ server_DH_params_ok#d0e8075c nonce:int128 server_nonce:int128 encrypted_answer:s
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>0164D069C5909C64</code></td>
<td><code>01647985599A9C64</code></td>
<td>Exact <code>unixtime*2^32</code>, <code>+(4*N)</code> if N messages with the same message ID were already generated</td>
</tr>
<tr>
<td>message_length</td>
<td>16, 4</td>
<td><code>C4020000</code> (708 in decimal)</td>
<td><code>E8020000</code> (744 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -483,31 +483,41 @@ server_DH_params_ok#d0e8075c nonce:int128 server_nonce:int128 encrypted_answer:s
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>DFD601C3D4AD9E9F592A9E0E97B3E603</code></td>
<td><code>61079BD3CE400AAAC06A7EC0F9E70AF2</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>748B6763BBE59396D6249A28791FF070</code></td>
<td><code>F33BCBF4A8C23D6AEE2D085D7713F5B1</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_answer</td>
<td>56, 596</td>
<td><code>FE500200941DB6389BB212EE21EFDC8F</code> <code>CBF22F9D12853E320DCCC7985D4EE801</code> <code>A5B671512EC6228330245849E5D1980A</code> <code>B5D013237936E76130154D9F742C8F49</code> <code>DBE6CAB450AC88A74D38E7E1C177E57E</code> <code>BB4AA534BA93DF8923BE4B1D60533A5D</code> <code>DF80DDB66CE7BAFA648A6BFC79B64142</code> <code>1BDD30B4992FBB1871F94CD86F5C4953</code> <code>E7540750EF5B80C0E34CA15964E8F40D</code> <code>C87D39B6A5EC270FFB84C7768AFE7C03</code> <code>A0F2367728687C3642CEA73251754AC0</code> <code>28556AEDD283FF18DB65A2D6B0A80B93</code> <code>F2EDB5644ABD97762A5DE6449E29C9DA</code> <code>78EFEAEBF0F6C97E2F52F99E99C9B861</code> <code>7D8BB5BF769F4BF429E632F464D1C655</code> <code>97F392B11900BE6C78D21CF1BABC4991</code> <code>F0BA557A57FFEA041609E503856BFFFD</code> <code>F73D2A20392039C1EB8E21A3BA95CC85</code> <code>267D00499B639AB2F7345E9276D4206C</code> <code>151C2AA3A000016DB8309A5F54E265A6</code> <code>F4BEAC0BDB486D2ACD539C1DD10E5F74</code> <code>96582A5248CDD7DDC8E6D494CB7BBDA2</code> <code>E9C7402C327003B92D7AA8BB77951FD5</code> <code>83C148E3C5DC82C0EE0C11F0E6B2590F</code> <code>3A1349D9076CDE62C3A162BA0EFD9060</code> <code>EC7FB8FEF9DAABFFF86D4FDC5679CFF1</code> <code>65C933DFBF81C25F6EDCB28730179560</code> <code>A934272A944A64A287B101ED18E8B012</code> <code>1C24EBF6C053A0F7FB38958FCC6360D5</code> <code>2F66701499016C18363A95D3AAC8321E</code> <code>ED6209FD54B86E1361E6CA2BBEF603C6</code> <code>6D4E8C732DD91BEA011913440E947711</code> <code>A47D052CC7DBEB3C4EFF09F81FC38FCD</code> <code>349AE79ECE9851AC8FA5611CDCD80785</code> <code>DD7F50EE2A652D32E3D0FDD6D9A7D117</code> <code>14B04F6D4F507F5BE5042C24A7B921AB</code> <code>1B1D0E8B3AD27718F7198C34D9EACA57</code><br> <code>E795AC60</code></td>
<td><code>FE500200F1B0F8E0E234D33F9E48D871</code> <code>E12FC90CE88EA536E0A561EE5463158E</code> <code>72208CF790CDAD29A3316DD8F36FB94C</code> <code>DD119BD77B4C7A62EFBC3E6EDC4010E8</code> <code>9E7208651C7262155C791F2352EBF97F</code> <code>C6883C59BB94033EDE006E252C46FA2F</code> <code>7B0BCAC6354AF423873F705BDE51AC92</code> <code>4F1B59258CDB03ABCA67AD5B2FF1847C</code> <code>F5DB3F0F0A65525DEAB4E0FEA2B3BDF7</code> <code>CB475215CFCBBF0782144B7A09153AF9</code> <code>ACB637AC8C3738977A480A1C367F1395</code> <code>404340E934F64628C17CD33FE5FDCB36</code> <code>2638ADC41834CEB6B43C25F8072593D2</code> <code>172FB2931AE1D74D5F62493A29EC52B3</code> <code>1C911956AD8B1057CEAB920BA102A70D</code> <code>B678A1FE5D5A7A428716F5CC063EBBEC</code> <code>F6776AF4AE2DD2E2BACBA28240B90E26</code> <code>76B05CE27F391275104412A65E5B56FC</code> <code>741B62FEA8BA1D612CF1FF83AE513226</code> <code>42B62B60582584D2459C946A497225C7</code> <code>55C03CA5219CFA50F900685CFD26D75E</code> <code>11267FF482A3CEA1DC50FAB87E08CB91</code> <code>4FA4F6583A1A69104E034DBA054670F2</code> <code>2AD266FE800D872428B5165DC54D87FF</code> <code>E992D31B25A0E04FFC7008D7E5BE0224</code> <code>30630330D365D7B28D33EC8F54D4DF5C</code> <code>5ED0D9E8A17535C8A03B25F4B297D4EC</code> <code>036D6AEEDF84653E63DDDEE7A2B91A0F</code> <code>0C2464FE56CD63D64315F77DDF6B4429</code> <code>E6C1EC7169FC1F74963154738E34DF12</code> <code>01E68BD03B5D7CBCC6D7E2820C4C05B5</code> <code>1AF167437E4263E243E45293246AC63C</code> <code>3B7AEE5DF2956385382161C876D78122</code> <code>845E70BF4A37C148E3CBEF4749FE92E6</code> <code>6B9DBA10321BEAF7728189CDCE8A0D80</code> <code>548FA16A369A8F6689B6E2FCE56520C4</code> <code>951422F2B213D917A56FF94F4D91BB96</code><br> <code>867A8761</code></td>
<td>See <a href="#conversion-of-encrypted-answer-into-answer">Decomposition of encrypted_answer »</a></td>
</tr>
</tbody>
</table>
<!-- end server_DH_params_ok -->
<h1><a class="anchor" href="#41-server-dh-inner-data-decryption-and-deserialization" id="41-server-dh-inner-data-decryption-and-deserialization" name="41-server-dh-inner-data-decryption-and-deserialization"><i class="anchor-icon"></i></a>4.1 server_dh_inner_data decryption and deserialization</h1>
<p>Decrypt <code>encrypted_answer</code> using the process specified in step 5.</p>
<p>Decrypt <code>encrypted_answer</code> using the reverse of the process specified in <a href="/mtproto/auth_key#5-server-responds-with">step 5</a>:</p>
<!-- start server_DH_inner_data_input -->
<pre><code>encrypted_answer = F1B0F8E0E234D33F9E48D871E12FC90CE88EA536E0A561EE5463158E72208CF790CDAD29A3316DD8F36FB94CDD119BD77B4C7A62EFBC3E6EDC4010E89E7208651C7262155C791F2352EBF97FC6883C59BB94033EDE006E252C46FA2F7B0BCAC6354AF423873F705BDE51AC924F1B59258CDB03ABCA67AD5B2FF1847CF5DB3F0F0A65525DEAB4E0FEA2B3BDF7CB475215CFCBBF0782144B7A09153AF9ACB637AC8C3738977A480A1C367F1395404340E934F64628C17CD33FE5FDCB362638ADC41834CEB6B43C25F8072593D2172FB2931AE1D74D5F62493A29EC52B31C911956AD8B1057CEAB920BA102A70DB678A1FE5D5A7A428716F5CC063EBBECF6776AF4AE2DD2E2BACBA28240B90E2676B05CE27F391275104412A65E5B56FC741B62FEA8BA1D612CF1FF83AE51322642B62B60582584D2459C946A497225C755C03CA5219CFA50F900685CFD26D75E11267FF482A3CEA1DC50FAB87E08CB914FA4F6583A1A69104E034DBA054670F22AD266FE800D872428B5165DC54D87FFE992D31B25A0E04FFC7008D7E5BE022430630330D365D7B28D33EC8F54D4DF5C5ED0D9E8A17535C8A03B25F4B297D4EC036D6AEEDF84653E63DDDEE7A2B91A0F0C2464FE56CD63D64315F77DDF6B4429E6C1EC7169FC1F74963154738E34DF1201E68BD03B5D7CBCC6D7E2820C4C05B51AF167437E4263E243E45293246AC63C3B7AEE5DF2956385382161C876D78122845E70BF4A37C148E3CBEF4749FE92E66B9DBA10321BEAF7728189CDCE8A0D80548FA16A369A8F6689B6E2FCE56520C4951422F2B213D917A56FF94F4D91BB96867A8761
tmp_aes_key = 83E6FC26B9543A3D5FE6357D7DF98DC7E5EDA4B1791A2973A414443CD6736E2B
tmp_aes_iv = F61B20DAF8A413BCEBE132A7EE9410C958F7B1C3537E82A7C35E899F77C0A68B</code></pre>
<!-- end server_DH_inner_data_input -->
<p>Yielding:</p>
<!-- start server_DH_inner_data_output -->
<pre><code>answer_with_hash = B0130D06F5DE68C63D9D8BAD16F534BEE3EE354BBA0D89B561079BD3CE400AAAC06A7EC0F9E70AF2F33BCBF4A8C23D6AEE2D085D7713F5B103000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE0001002E356F542ED36C7C234A0C6DBA49CDF1B1D4510968CEF23450B0FC42F20B63757B95D5AFC1DCA0ED8E146219B411B0D254A7C740457F54E51C4EC8B6B9C97B84A23EA77E36D38A4230BE5D7B1E65BB3F0A4E6D486B22CB279703634AFE013962427A67D78C81FC74AD292FB970B3DFB4F00F93F0FB172B3C9069234E2154AC2D2CD52EA2015D693CF37308D81F1A27B92EE69B260B056A34ADBFC6496A419A24E2D8F54B048FCDD66AB99D0A3CD0DA36DE726019C11750F39FF63BAC6ADD9758286D44275535BB19B53AB57C7C890E0DE9DA13A50DC6F3E9F3C6EBD637489D6968960CC9991F69B0E2E1C306144395D303284C0C12D4376CB56BA051C060FCFF599A9C64A0D61A12CE49CCFA
answer = BA0D89B561079BD3CE400AAAC06A7EC0F9E70AF2F33BCBF4A8C23D6AEE2D085D7713F5B103000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE0001002E356F542ED36C7C234A0C6DBA49CDF1B1D4510968CEF23450B0FC42F20B63757B95D5AFC1DCA0ED8E146219B411B0D254A7C740457F54E51C4EC8B6B9C97B84A23EA77E36D38A4230BE5D7B1E65BB3F0A4E6D486B22CB279703634AFE013962427A67D78C81FC74AD292FB970B3DFB4F00F93F0FB172B3C9069234E2154AC2D2CD52EA2015D693CF37308D81F1A27B92EE69B260B056A34ADBFC6496A419A24E2D8F54B048FCDD66AB99D0A3CD0DA36DE726019C11750F39FF63BAC6ADD9758286D44275535BB19B53AB57C7C890E0DE9DA13A50DC6F3E9F3C6EBD637489D6968960CC9991F69B0E2E1C306144395D303284C0C12D4376CB56BA051C060FCFF599A9C64A0D61A12CE49CCFA</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 DF D6 01 C3 D4 AD 9E 9F 59 2A 9E 0E
0010 | 97 B3 E6 03 74 8B 67 63 BB E5 93 96 D6 24 9A 28
0020 | 79 1F F0 70 03 00 00 00 FE 00 01 00 C7 1C AE B9
<pre><code>0000 | BA 0D 89 B5 61 07 9B D3 CE 40 0A AA C0 6A 7E C0
0010 | F9 E7 0A F2 F3 3B CB F4 A8 C2 3D 6A EE 2D 08 5D
0020 | 77 13 F5 B1 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
@ -524,24 +534,24 @@ server_DH_params_ok#d0e8075c nonce:int128 server_nonce:int128 encrypted_answer:s
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 | 79 0F 9F 6E E3 E6 FF 34 9C DF EC E3 86 C8 1B 49
0140 | 2A F8 7B 0D B1 00 CB 7C D9 6E E2 9A 6F 74 1A FF
0150 | A7 8F 6A 48 7C 89 80 11 FF 3B 64 7E 3E 1B 79 BC
0160 | AA C2 74 7E 10 FA FA B3 69 AD BA 9E E6 7F DD 31
0170 | 67 9C D3 35 6B 06 9F E3 1F 80 B2 5F 15 D4 6E 86
0180 | 64 03 0E 4B EA 40 7A A8 90 22 C7 CB A2 7B AA E5
0190 | 87 46 5D 8F B5 C0 0B A0 5B 74 92 43 94 1A 11 59
01A0 | 8B 48 45 B4 80 C4 4C 38 0F F8 AC 87 4E FB 22 51
01B0 | 84 17 43 23 28 AD 26 36 29 07 D1 B4 65 0C 02 65
01C0 | 95 49 9F 53 55 82 11 FC 08 D8 00 72 98 00 B6 CF
01D0 | EC 22 F0 E9 EB 56 4C A7 7E 7A 7F 97 D1 A9 21 65
01E0 | 90 1F 65 2A AC DC 09 80 BD F8 A1 F1 0A 09 7D C8
01F0 | 49 0D FA 27 1A 16 DF B0 AB 2D FB 10 28 6F 6E 12
0200 | 03 AB 0A 92 5C DE DE D4 BB 94 00 43 4D 47 C5 90
0210 | 08 E9 67 96 3B E1 1D 5E 12 F5 8B 8B 37 14 88 3F
0220 | 7A 02 48 66 DB 59 3A 32 68 F3 98 CE D9 53 98 37
0230 | C5 90 9C 64</code></pre>
<p>Payload serialization:</p>
0130 | 2E 35 6F 54 2E D3 6C 7C 23 4A 0C 6D BA 49 CD F1
0140 | B1 D4 51 09 68 CE F2 34 50 B0 FC 42 F2 0B 63 75
0150 | 7B 95 D5 AF C1 DC A0 ED 8E 14 62 19 B4 11 B0 D2
0160 | 54 A7 C7 40 45 7F 54 E5 1C 4E C8 B6 B9 C9 7B 84
0170 | A2 3E A7 7E 36 D3 8A 42 30 BE 5D 7B 1E 65 BB 3F
0180 | 0A 4E 6D 48 6B 22 CB 27 97 03 63 4A FE 01 39 62
0190 | 42 7A 67 D7 8C 81 FC 74 AD 29 2F B9 70 B3 DF B4
01A0 | F0 0F 93 F0 FB 17 2B 3C 90 69 23 4E 21 54 AC 2D
01B0 | 2C D5 2E A2 01 5D 69 3C F3 73 08 D8 1F 1A 27 B9
01C0 | 2E E6 9B 26 0B 05 6A 34 AD BF C6 49 6A 41 9A 24
01D0 | E2 D8 F5 4B 04 8F CD D6 6A B9 9D 0A 3C D0 DA 36
01E0 | DE 72 60 19 C1 17 50 F3 9F F6 3B AC 6A DD 97 58
01F0 | 28 6D 44 27 55 35 BB 19 B5 3A B5 7C 7C 89 0E 0D
0200 | E9 DA 13 A5 0D C6 F3 E9 F3 C6 EB D6 37 48 9D 69
0210 | 68 96 0C C9 99 1F 69 B0 E2 E1 C3 06 14 43 95 D3
0220 | 03 28 4C 0C 12 D4 37 6C B5 6B A0 51 C0 60 FC FF
0230 | 59 9A 9C 64</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">
<thead>
@ -562,13 +572,13 @@ server_DH_params_ok#d0e8075c nonce:int128 server_nonce:int128 encrypted_answer:s
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>DFD601C3D4AD9E9F592A9E0E97B3E603</code></td>
<td><code>61079BD3CE400AAAC06A7EC0F9E70AF2</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>748B6763BBE59396D6249A28791FF070</code></td>
<td><code>F33BCBF4A8C23D6AEE2D085D7713F5B1</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
@ -586,13 +596,13 @@ server_DH_params_ok#d0e8075c nonce:int128 server_nonce:int128 encrypted_answer:s
<tr>
<td>g_a</td>
<td>300, 260</td>
<td><code>FE000100790F9F6EE3E6FF349CDFECE3</code> <code>86C81B492AF87B0DB100CB7CD96EE29A</code> <code>6F741AFFA78F6A487C898011FF3B647E</code> <code>3E1B79BCAAC2747E10FAFAB369ADBA9E</code> <code>E67FDD31679CD3356B069FE31F80B25F</code> <code>15D46E8664030E4BEA407AA89022C7CB</code> <code>A27BAAE587465D8FB5C00BA05B749243</code> <code>941A11598B4845B480C44C380FF8AC87</code> <code>4EFB22518417432328AD26362907D1B4</code> <code>650C026595499F53558211FC08D80072</code> <code>9800B6CFEC22F0E9EB564CA77E7A7F97</code> <code>D1A92165901F652AACDC0980BDF8A1F1</code> <code>0A097DC8490DFA271A16DFB0AB2DFB10</code> <code>286F6E1203AB0A925CDEDED4BB940043</code> <code>4D47C59008E967963BE11D5E12F58B8B</code> <code>3714883F7A024866DB593A3268F398CE</code><br> <code>D9539837</code></td>
<td><code>FE0001002E356F542ED36C7C234A0C6D</code> <code>BA49CDF1B1D4510968CEF23450B0FC42</code> <code>F20B63757B95D5AFC1DCA0ED8E146219</code> <code>B411B0D254A7C740457F54E51C4EC8B6</code> <code>B9C97B84A23EA77E36D38A4230BE5D7B</code> <code>1E65BB3F0A4E6D486B22CB279703634A</code> <code>FE013962427A67D78C81FC74AD292FB9</code> <code>70B3DFB4F00F93F0FB172B3C9069234E</code> <code>2154AC2D2CD52EA2015D693CF37308D8</code> <code>1F1A27B92EE69B260B056A34ADBFC649</code> <code>6A419A24E2D8F54B048FCDD66AB99D0A</code> <code>3CD0DA36DE726019C11750F39FF63BAC</code> <code>6ADD9758286D44275535BB19B53AB57C</code> <code>7C890E0DE9DA13A50DC6F3E9F3C6EBD6</code> <code>37489D6968960CC9991F69B0E2E1C306</code> <code>144395D303284C0C12D4376CB56BA051</code><br> <code>C060FCFF</code></td>
<td><code>g_a</code> diffie-hellman parameter</td>
</tr>
<tr>
<td>server_time</td>
<td>560, 4</td>
<td><code>C5909C64</code> (1687982277 in decimal)</td>
<td><code>599A9C64</code> (1687984729 in decimal)</td>
<td>Server time</td>
</tr>
</tbody>
@ -601,35 +611,35 @@ server_DH_params_ok#d0e8075c nonce:int128 server_nonce:int128 encrypted_answer:s
<h1><a class="anchor" href="#42-generate-diffie-helman-parameters" id="42-generate-diffie-helman-parameters" name="42-generate-diffie-helman-parameters"><i class="anchor-icon"></i></a>4.2. generate diffie-helman parameters</h1>
<p>First, generate a secure random 2048-bit number b:</p>
<!-- start b -->
<pre><code>b = 9A995B773D2EFDBC35278F68CE723EBD131407AE61447E983B144A714FB86AF6029CE9537D24E5AD6CFE7335079D4B00725FDE14A974CC8D6C01B98EE6AA208D189A09514499060DB69BE3624425F3FCC8E53188FD3F60593E43945B8D2C5DEAC6A5A94EBDDDDD6ABF349044F28E6DCA180F6707B61B379B7C40BD20347FC16AA9D421CF523C8CC2EE024E0FCCF8D12BC40A2B83FF48747B2F651D20A65A044B8EEBA44C5AE9639B279868DCD774926FBA74767693B60D9C9F480C7E6C38839197F71E0A901972D2E467AE67BC57B9922655012F9C4A4C32546D9486559E3D0C193D92FC6349F5007C89907C3678F04F6B5745520929FB30677F3F75643CF5A1</code></pre>
<pre><code>b = BEB68C99A15F26F3590BB9E035CF2285590CDC8BCEC7DC112973D0D68FC78DD283FB7C38D39450FDA2B65BD7B4EBB25C042C4C1D7B52DAEEA7C40898984279DE8A5B4101D94A9621D2B4EF405864B0975FF21C6971B039161190346706C8A35473CA5B9E8CF0A1E3819D2DFA294270CEB6652DF940C26555425987513EAFD09CDD6F70C889DBBC1D1BBF287154760CC4BB3E80A8B313914F4017C22314A3DCDC634AE3BB7C33A45835E87A093706280FD7BEF2C1C3952BC19C55F2086E966EB374A635CC66D8B70899236C6E0944FF2353DE77610C9567ACC221FF036F29F463C0593DA02E90DE1AF4F65C1C709482610A76E71E20B1068B7DFC5D990E865D66</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 = B5841CD8246261CFBD6FDA1C4BF64E7ECCC82C19EAB86C59D986C429D6A0D5204C547C74ED6AB61E28A4AA9A39FA676D14C1C9FACCE9B9D3056A34093408CEC28EEDF5F09AC3F2645137D91F50E4FE6A358A24507EB3E8AB94312D8013C4740E492C0A5E902E2E460CFA96055C8682C3B220D0E1661884FCE525D3AD8ED7B23D3B341BDFB1D5DD988F363A48730EC1565313B20AD286FD7E36317E3D870E92A9AEBAB835833F023A185168922FA7BCEA7D5F4F0B1B7DBD10F0818D7F9A4A94961EA4597415E457CD575E309B73225F205CD2D67918C00C170412CD430D6A343D061C4BAD7AC149CC4EC5F1910F3A0C09D184C9F123FCA71C51E83419E9E5F64D</code></pre>
<pre><code>g_b = 2F96BE7689D134320851F8247F8B92A541EA353EFBE190F0B79A54451121A3A21B3AE5AD1F744A957804362EFFCB1199342FEB787873032801CC9B991349E86B9E6973A1337A67AE94A5E73BD312DD146B0659B25460A838612055B5A5823814F3AAA8DFBD54B8094C42994541407C11293DFC08FCEDB50665104207ECAAC3DEE4B5AEBC1742159B39F8B00D4CD49616F8C3AF5E50A69EBEE7B7913B91369BD9736F9A42B4697F0DB7B11B95A7C927DF7D72DD90A42B2B3B9D3F2281D27454F1CFE659B33832855DD95E65EB6CF34EAE308F7B2972016BBBDEB20C30782B587CA16C8CDEB87A5108975A6069BAAB97EDBBFB1E2C0B7C190142F66B4970C2D130</code></pre>
<!-- end g_b -->
<h1><a class="anchor" href="#43-generation-of-encrypted-data" id="43-generation-of-encrypted-data" name="43-generation-of-encrypted-data"><i class="anchor-icon"></i></a>4.3 generation of encrypted_data</h1>
<!-- start client_DH_inner_data -->
<p>Generated payload (excluding transport headers/trailers):</p>
<pre><code>0000 | 54 B6 43 66 DF D6 01 C3 D4 AD 9E 9F 59 2A 9E 0E
0010 | 97 B3 E6 03 74 8B 67 63 BB E5 93 96 D6 24 9A 28
0020 | 79 1F F0 70 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | B5 84 1C D8 24 62 61 CF BD 6F DA 1C 4B F6 4E 7E
0040 | CC C8 2C 19 EA B8 6C 59 D9 86 C4 29 D6 A0 D5 20
0050 | 4C 54 7C 74 ED 6A B6 1E 28 A4 AA 9A 39 FA 67 6D
0060 | 14 C1 C9 FA CC E9 B9 D3 05 6A 34 09 34 08 CE C2
0070 | 8E ED F5 F0 9A C3 F2 64 51 37 D9 1F 50 E4 FE 6A
0080 | 35 8A 24 50 7E B3 E8 AB 94 31 2D 80 13 C4 74 0E
0090 | 49 2C 0A 5E 90 2E 2E 46 0C FA 96 05 5C 86 82 C3
00A0 | B2 20 D0 E1 66 18 84 FC E5 25 D3 AD 8E D7 B2 3D
00B0 | 3B 34 1B DF B1 D5 DD 98 8F 36 3A 48 73 0E C1 56
00C0 | 53 13 B2 0A D2 86 FD 7E 36 31 7E 3D 87 0E 92 A9
00D0 | AE BA B8 35 83 3F 02 3A 18 51 68 92 2F A7 BC EA
00E0 | 7D 5F 4F 0B 1B 7D BD 10 F0 81 8D 7F 9A 4A 94 96
00F0 | 1E A4 59 74 15 E4 57 CD 57 5E 30 9B 73 22 5F 20
0100 | 5C D2 D6 79 18 C0 0C 17 04 12 CD 43 0D 6A 34 3D
0110 | 06 1C 4B AD 7A C1 49 CC 4E C5 F1 91 0F 3A 0C 09
0120 | D1 84 C9 F1 23 FC A7 1C 51 E8 34 19 E9 E5 F6 4D</code></pre>
<p>Payload serialization:</p>
<pre><code>0000 | 54 B6 43 66 61 07 9B D3 CE 40 0A AA C0 6A 7E C0
0010 | F9 E7 0A F2 F3 3B CB F4 A8 C2 3D 6A EE 2D 08 5D
0020 | 77 13 F5 B1 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | 2F 96 BE 76 89 D1 34 32 08 51 F8 24 7F 8B 92 A5
0040 | 41 EA 35 3E FB E1 90 F0 B7 9A 54 45 11 21 A3 A2
0050 | 1B 3A E5 AD 1F 74 4A 95 78 04 36 2E FF CB 11 99
0060 | 34 2F EB 78 78 73 03 28 01 CC 9B 99 13 49 E8 6B
0070 | 9E 69 73 A1 33 7A 67 AE 94 A5 E7 3B D3 12 DD 14
0080 | 6B 06 59 B2 54 60 A8 38 61 20 55 B5 A5 82 38 14
0090 | F3 AA A8 DF BD 54 B8 09 4C 42 99 45 41 40 7C 11
00A0 | 29 3D FC 08 FC ED B5 06 65 10 42 07 EC AA C3 DE
00B0 | E4 B5 AE BC 17 42 15 9B 39 F8 B0 0D 4C D4 96 16
00C0 | F8 C3 AF 5E 50 A6 9E BE E7 B7 91 3B 91 36 9B D9
00D0 | 73 6F 9A 42 B4 69 7F 0D B7 B1 1B 95 A7 C9 27 DF
00E0 | 7D 72 DD 90 A4 2B 2B 3B 9D 3F 22 81 D2 74 54 F1
00F0 | CF E6 59 B3 38 32 85 5D D9 5E 65 EB 6C F3 4E AE
0100 | 30 8F 7B 29 72 01 6B BB DE B2 0C 30 78 2B 58 7C
0110 | A1 6C 8C DE B8 7A 51 08 97 5A 60 69 BA AB 97 ED
0120 | BB FB 1E 2C 0B 7C 19 01 42 F6 6B 49 70 C2 D1 30</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">
<thead>
@ -650,63 +660,74 @@ server_DH_params_ok#d0e8075c nonce:int128 server_nonce:int128 encrypted_answer:s
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>DFD601C3D4AD9E9F592A9E0E97B3E603</code></td>
<td><code>61079BD3CE400AAAC06A7EC0F9E70AF2</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>748B6763BBE59396D6249A28791FF070</code></td>
<td><code>F33BCBF4A8C23D6AEE2D085D7713F5B1</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>g_b</td>
<td>36, 260</td>
<td><code>FE000100B5841CD8246261CFBD6FDA1C</code> <code>4BF64E7ECCC82C19EAB86C59D986C429</code> <code>D6A0D5204C547C74ED6AB61E28A4AA9A</code> <code>39FA676D14C1C9FACCE9B9D3056A3409</code> <code>3408CEC28EEDF5F09AC3F2645137D91F</code> <code>50E4FE6A358A24507EB3E8AB94312D80</code> <code>13C4740E492C0A5E902E2E460CFA9605</code> <code>5C8682C3B220D0E1661884FCE525D3AD</code> <code>8ED7B23D3B341BDFB1D5DD988F363A48</code> <code>730EC1565313B20AD286FD7E36317E3D</code> <code>870E92A9AEBAB835833F023A18516892</code> <code>2FA7BCEA7D5F4F0B1B7DBD10F0818D7F</code> <code>9A4A94961EA4597415E457CD575E309B</code> <code>73225F205CD2D67918C00C170412CD43</code> <code>0D6A343D061C4BAD7AC149CC4EC5F191</code> <code>0F3A0C09D184C9F123FCA71C51E83419</code><br> <code>E9E5F64D</code></td>
<td><code>pow(g, b) mod dh_prime</code></td>
<td><code>FE0001002F96BE7689D134320851F824</code> <code>7F8B92A541EA353EFBE190F0B79A5445</code> <code>1121A3A21B3AE5AD1F744A957804362E</code> <code>FFCB1199342FEB787873032801CC9B99</code> <code>1349E86B9E6973A1337A67AE94A5E73B</code> <code>D312DD146B0659B25460A838612055B5</code> <code>A5823814F3AAA8DFBD54B8094C429945</code> <code>41407C11293DFC08FCEDB50665104207</code> <code>ECAAC3DEE4B5AEBC1742159B39F8B00D</code> <code>4CD49616F8C3AF5E50A69EBEE7B7913B</code> <code>91369BD9736F9A42B4697F0DB7B11B95</code> <code>A7C927DF7D72DD90A42B2B3B9D3F2281</code> <code>D27454F1CFE659B33832855DD95E65EB</code> <code>6CF34EAE308F7B2972016BBBDEB20C30</code> <code>782B587CA16C8CDEB87A5108975A6069</code> <code>BAAB97EDBBFB1E2C0B7C190142F66B49</code><br> <code>70C2D130</code></td>
<td>Single-byte prefix denoting length, a 256-byte (2048-bit) string, and zero bytes of padding</td>
</tr>
<tr>
<td>retry_id</td>
<td>296, 8</td>
<td><code>0000000000000000</code></td>
<td>Equal to zero at the time of the first attempt; otherwise, it is equal to <code>auth_key_aux_hash</code> from the previous failed attempt (see Item 9).</td>
<td>Equal to zero at the time of the first attempt; otherwise, it is equal to <code>auth_key_aux_hash</code> from the previous failed attempt (see Item 7).</td>
</tr>
</tbody>
</table>
<!-- end client_DH_inner_data -->
<p>The serialization of <em>Client_DH_Inner_Data</em> produces some string <strong>data</strong>. This is followed by <strong>encrypted_data</strong>:</p>
<pre><code>data_with_hash := SHA1(data) + data + (0-15 random bytes); such that the length be divisible by 16;
AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv) = 928A4957D0463B525C1CC48AABAA030A256BE5C746792C84CA4C5A0DF60AC799048D98A38A8480EDCF082214DFC79DCB9EE34E206513E2B3BC1504CFE6C9ADA46BF9A03CA74F192EAF8C278454ADABC795A566615462D31817382984039505F71CB33A41E2527A4B1AC05107872FED8E3ABCEE1518AE965B0ED3AED7F67479155BDA8E4C286B64CDF123EC748CF289B1DB02D1907B562DF462D8582BA6F0A3022DC2D3504D69D1BA48B677E3A830BFAFD67584C8AA24E1344A8904E305F9587C92EF964F0083F50F61EAB4A393EAA33C9270294AEDC7732891D4EA1599F52311D74469D2112F4EDF3F342E93C8E87E812DC3989BAECFE6740A46077524C75093F5A5405736DE8937BB6E42C9A0DCF22CA53227D462BCCC2CFE94B6FE86AB7FBFA395021F66661AF7C0024CA2986CA03F3476905407D1EA9C010B763258DB1AA2CC7826D91334EFC1FDC665B67FE45ED0</code></pre>
<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="#6-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 = 54B6436661079BD3CE400AAAC06A7EC0F9E70AF2F33BCBF4A8C23D6AEE2D085D7713F5B10000000000000000FE0001002F96BE7689D134320851F8247F8B92A541EA353EFBE190F0B79A54451121A3A21B3AE5AD1F744A957804362EFFCB1199342FEB787873032801CC9B991349E86B9E6973A1337A67AE94A5E73BD312DD146B0659B25460A838612055B5A5823814F3AAA8DFBD54B8094C42994541407C11293DFC08FCEDB50665104207ECAAC3DEE4B5AEBC1742159B39F8B00D4CD49616F8C3AF5E50A69EBEE7B7913B91369BD9736F9A42B4697F0DB7B11B95A7C927DF7D72DD90A42B2B3B9D3F2281D27454F1CFE659B33832855DD95E65EB6CF34EAE308F7B2972016BBBDEB20C30782B587CA16C8CDEB87A5108975A6069BAAB97EDBBFB1E2C0B7C190142F66B4970C2D130
padding = 3F278A4C4010D41218A1D70F
tmp_aes_key = 83E6FC26B9543A3D5FE6357D7DF98DC7E5EDA4B1791A2973A414443CD6736E2B
tmp_aes_iv = F61B20DAF8A413BCEBE132A7EE9410C958F7B1C3537E82A7C35E899F77C0A68B</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 = 430A36E55F18CB44BFFFAC0272BCBE6F1FCFC589D2FD35A96EF285F383800F6CBBCC0B0A576827B237A41894BFFEFA5D9C880340CBB1CD4E016BE6A089ED80C41456397EFE2791707BBBD629C5CBAE237856BCFF5D3B057A26C9FA8917B6B218B10D1B7ADB62F471AEFDA26D2678C492B569D636E38DC46B1BDE833A980C16E4A1D8E7CDE40AF26DD28E00CA34A8C01BE311550C81681B0E070CD627333E837E395980C93F69417BCA8864AECCF4211E949EA79FC3556F415E4F8C1B0454217759E8436132323A4251BBB051F17E4191C40BA003757918180EDF9537AC791C15093FED041F1FC0F0A88C39BAF6E463F1A90BAC6D7A3BE0C6195F3230DB264047341E2CB4067404FE078EB89E0745903DB1AA4BBDAB03E1DA91083D7F8D57AD0AC69948D00A380912E7F297CF86C316F7517798869B2185E9AEFADB2BDC07E2893D4B9FD06E723AC2FE0A96BD7532A424</code></pre>
<!-- end client_DH_inner_data_output -->
<p>The length of the final string is 336 bytes.</p>
<h1><a class="anchor" href="#5-request-set-client-dh-params" id="5-request-set-client-dh-params" name="5-request-set-client-dh-params"><i class="anchor-icon"></i></a>5. request set_client_dh_params</h1>
<!-- start set_client_DH_params -->
<p>Sent payload (excluding transport headers/trailers):</p>
<pre><code>0000 | 00 00 00 00 00 00 00 00 00 00 00 00 C5 90 9C 64
0010 | 78 01 00 00 1F 5F 04 F5 DF D6 01 C3 D4 AD 9E 9F
0020 | 59 2A 9E 0E 97 B3 E6 03 74 8B 67 63 BB E5 93 96
0030 | D6 24 9A 28 79 1F F0 70 FE 50 01 00 61 90 D4 3D
0040 | 96 79 4A F6 81 C7 36 6F A0 50 7F 35 CB E5 0F D0
0050 | 1E D9 BF 27 49 B1 D4 DB B9 17 C7 73 B6 05 B5 37
0060 | 0C F1 01 A2 0C F8 A6 E3 5E C8 C7 F0 7F A2 B4 C3
0070 | CF F9 7D 11 55 FD 90 37 9B A3 D5 87 53 10 1A D4
0080 | FA 36 8F 0C 56 B9 C5 7D 50 1C 14 AF F8 5C 97 65
0090 | 73 40 A6 F3 45 87 13 F5 F7 D7 4B 2B 79 45 52 03
00A0 | 22 4F 42 5D E4 65 2D 05 A4 4A FF A4 E7 70 B6 CF
00B0 | A8 BD D2 2C 01 B6 4C 3F 0D 32 09 D8 4C 64 FF C7
00C0 | EB C9 B3 C8 5D 8C 02 F9 D2 7E F7 20 EE A4 DC 78
00D0 | 71 A7 C9 F1 4C 0A B1 31 35 5E EB 80 EE C9 16 8F
00E0 | 86 83 26 4D FF F9 48 75 41 F9 B5 2D C6 92 15 7A
00F0 | 71 6F A0 CC 9E 45 0F 44 CF F4 19 BB 0E B8 7C 52
0100 | 1D F8 1C 9D 24 F3 4D 47 77 2A 63 87 B9 3D 4C 5F
0110 | E0 CA E8 44 4B 29 BE 25 38 C4 E0 CA 5E E6 9A 20
0120 | 49 F8 C9 2B 09 FE 52 BE 48 E9 E6 5C 76 7D D2 6C
0130 | 5D 52 36 42 A6 11 04 D1 B6 81 9C 88 D9 A9 77 5A
0140 | E8 56 4A 72 21 8B 38 DC 53 48 7E 91 95 9E 5A EC
0150 | 7C E8 DB 02 04 4D 2D D1 C8 26 2A F6 50 75 E3 0F
0160 | 2C EA 99 73 60 CF 1F EF B7 A3 46 4E 1C 69 24 61
0170 | 7B CE D6 B3 AD 89 A5 87 42 20 4D A0 76 0E EB E5
0180 | 8D A2 81 B4 C1 0D 97 32 99 E0 58 67</code></pre>
<p>Payload serialization:</p>
<pre><code>0000 | 00 00 00 00 00 00 00 00 04 00 00 00 59 9A 9C 64
0010 | 78 01 00 00 1F 5F 04 F5 61 07 9B D3 CE 40 0A AA
0020 | C0 6A 7E C0 F9 E7 0A F2 F3 3B CB F4 A8 C2 3D 6A
0030 | EE 2D 08 5D 77 13 F5 B1 FE 50 01 00 43 0A 36 E5
0040 | 5F 18 CB 44 BF FF AC 02 72 BC BE 6F 1F CF C5 89
0050 | D2 FD 35 A9 6E F2 85 F3 83 80 0F 6C BB CC 0B 0A
0060 | 57 68 27 B2 37 A4 18 94 BF FE FA 5D 9C 88 03 40
0070 | CB B1 CD 4E 01 6B E6 A0 89 ED 80 C4 14 56 39 7E
0080 | FE 27 91 70 7B BB D6 29 C5 CB AE 23 78 56 BC FF
0090 | 5D 3B 05 7A 26 C9 FA 89 17 B6 B2 18 B1 0D 1B 7A
00A0 | DB 62 F4 71 AE FD A2 6D 26 78 C4 92 B5 69 D6 36
00B0 | E3 8D C4 6B 1B DE 83 3A 98 0C 16 E4 A1 D8 E7 CD
00C0 | E4 0A F2 6D D2 8E 00 CA 34 A8 C0 1B E3 11 55 0C
00D0 | 81 68 1B 0E 07 0C D6 27 33 3E 83 7E 39 59 80 C9
00E0 | 3F 69 41 7B CA 88 64 AE CC F4 21 1E 94 9E A7 9F
00F0 | C3 55 6F 41 5E 4F 8C 1B 04 54 21 77 59 E8 43 61
0100 | 32 32 3A 42 51 BB B0 51 F1 7E 41 91 C4 0B A0 03
0110 | 75 79 18 18 0E DF 95 37 AC 79 1C 15 09 3F ED 04
0120 | 1F 1F C0 F0 A8 8C 39 BA F6 E4 63 F1 A9 0B AC 6D
0130 | 7A 3B E0 C6 19 5F 32 30 DB 26 40 47 34 1E 2C B4
0140 | 06 74 04 FE 07 8E B8 9E 07 45 90 3D B1 AA 4B BD
0150 | AB 03 E1 DA 91 08 3D 7F 8D 57 AD 0A C6 99 48 D0
0160 | 0A 38 09 12 E7 F2 97 CF 86 C3 16 F7 51 77 98 86
0170 | 9B 21 85 E9 AE FA DB 2B DC 07 E2 89 3D 4B 9F D0
0180 | 6E 72 3A C2 FE 0A 96 BD 75 32 A4 24</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">
<thead>
@ -727,7 +748,7 @@ AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv) = 928A4957D0463B525
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>00000000C5909C64</code></td>
<td><code>04000000599A9C64</code></td>
<td>Exact <code>unixtime*2^32</code>, <code>+(4*N)</code> if N messages with the same message ID were already generated</td>
</tr>
<tr>
@ -745,20 +766,20 @@ AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv) = 928A4957D0463B525
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>DFD601C3D4AD9E9F592A9E0E97B3E603</code></td>
<td><code>61079BD3CE400AAAC06A7EC0F9E70AF2</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>748B6763BBE59396D6249A28791FF070</code></td>
<td><code>F33BCBF4A8C23D6AEE2D085D7713F5B1</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_data</td>
<td>56, 340</td>
<td><code>FE5001006190D43D96794AF681C7366F</code> <code>A0507F35CBE50FD01ED9BF2749B1D4DB</code> <code>B917C773B605B5370CF101A20CF8A6E3</code> <code>5EC8C7F07FA2B4C3CFF97D1155FD9037</code> <code>9BA3D58753101AD4FA368F0C56B9C57D</code> <code>501C14AFF85C97657340A6F3458713F5</code> <code>F7D74B2B79455203224F425DE4652D05</code> <code>A44AFFA4E770B6CFA8BDD22C01B64C3F</code> <code>0D3209D84C64FFC7EBC9B3C85D8C02F9</code> <code>D27EF720EEA4DC7871A7C9F14C0AB131</code> <code>355EEB80EEC9168F8683264DFFF94875</code> <code>41F9B52DC692157A716FA0CC9E450F44</code> <code>CFF419BB0EB87C521DF81C9D24F34D47</code> <code>772A6387B93D4C5FE0CAE8444B29BE25</code> <code>38C4E0CA5EE69A2049F8C92B09FE52BE</code> <code>48E9E65C767DD26C5D523642A61104D1</code> <code>B6819C88D9A9775AE8564A72218B38DC</code> <code>53487E91959E5AEC7CE8DB02044D2DD1</code> <code>C8262AF65075E30F2CEA997360CF1FEF</code> <code>B7A3464E1C6924617BCED6B3AD89A587</code> <code>42204DA0760EEBE58DA281B4C10D9732</code><br> <code>99E05867</code></td>
<td>Encrypted client_DH_inner_data, generated as follows</td>
<td><code>FE500100430A36E55F18CB44BFFFAC02</code> <code>72BCBE6F1FCFC589D2FD35A96EF285F3</code> <code>83800F6CBBCC0B0A576827B237A41894</code> <code>BFFEFA5D9C880340CBB1CD4E016BE6A0</code> <code>89ED80C41456397EFE2791707BBBD629</code> <code>C5CBAE237856BCFF5D3B057A26C9FA89</code> <code>17B6B218B10D1B7ADB62F471AEFDA26D</code> <code>2678C492B569D636E38DC46B1BDE833A</code> <code>980C16E4A1D8E7CDE40AF26DD28E00CA</code> <code>34A8C01BE311550C81681B0E070CD627</code> <code>333E837E395980C93F69417BCA8864AE</code> <code>CCF4211E949EA79FC3556F415E4F8C1B</code> <code>0454217759E8436132323A4251BBB051</code> <code>F17E4191C40BA003757918180EDF9537</code> <code>AC791C15093FED041F1FC0F0A88C39BA</code> <code>F6E463F1A90BAC6D7A3BE0C6195F3230</code> <code>DB264047341E2CB4067404FE078EB89E</code> <code>0745903DB1AA4BBDAB03E1DA91083D7F</code> <code>8D57AD0AC69948D00A380912E7F297CF</code> <code>86C316F7517798869B2185E9AEFADB2B</code> <code>DC07E2893D4B9FD06E723AC2FE0A96BD</code><br> <code>7532A424</code></td>
<td>Encrypted client_DH_inner_data generated previously</td>
</tr>
</tbody>
</table>
@ -766,18 +787,18 @@ AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv) = 928A4957D0463B525
<h1><a class="anchor" href="#6-auth-key-generation" id="6-auth-key-generation" name="6-auth-key-generation"><i class="anchor-icon"></i></a>6. auth key generation</h1>
<p>The clients computes the auth_key using formula <code>g^{ab} mod dh_prime</code>:</p>
<!-- start auth_key -->
<pre><code>auth_key = 7AB41163F9DADC0E7AD17B0ED9C960B23436B0925E8D875C14AE2CB171D3B37F5E98A186E6C447641AD963FB63D99B31DEF206F55D522A41D120D04C4D5ACA12CEBF1130A4BF09C7A430CF5ACF550BA166CAE2AD842ECD94E26B4DC57460F537B2CB1DEEB8F681ABFF0C416757BAE47C4B1E2BFEE3EEB994D653D9794633A5C8BE0EEAEE35E1DFA271BE94140F39FCDAE9DD51330C7F46761744F4B79CBFB89A82891567A4AB8924C84F2024049F3E2DB86E6008454A0D3E5353E44E72CB2E1A24CFF0573F8EC4FE420EF0F4D15DE37749D2907DDB960C9BA0A8C89EA6AFAD8E8B0862D231329DEC391C793D067F4459587A5D6374B188126A949852133013A6</code></pre>
<pre><code>auth_key = 387F13DD24C48755BB0B3F4EF874E0AE86EAE3236676695D30BCC0005ECD0836F9968DAB19B362E4A2C0E0A1DDB1E0DCDA225A2571D5D911EFBE764CA97123799117B3AC18FA749F287B304156427DCECF1D4C16A2922C9727D0CF004EA075C22A37B0D901933DEFAF27A6D1D7FC57024E02E5D12ECF9D6C1ADF1E7A1B5A85284FA29B09DA5BD5ACB0DAE6580B88C026E97F2BFDCFF183C9661DFD639804B3DFB175EA755E9D9B02DA907B299C4A84B070C0A517E27F395B8ABA67C923583BF0493A27559C9716951B554669D0A33AD6E9A8D78C5EE1E89A03A177B06833B45DD60A5680E46F6B03B7C94ECAF5E7E31B3B03D28F59E237D764E80973C1F05C98</code></pre>
<!-- end auth_key -->
<h1><a class="anchor" href="#7-reply-set-client-dh-params-answer" id="7-reply-set-client-dh-params-answer" name="7-reply-set-client-dh-params-answer"><i class="anchor-icon"></i></a>7. reply set_client_dh_params_answer</h1>
<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 94 13 B1 C5 90 9C 64
0010 | 38 00 00 00 34 F7 CB 3B DF D6 01 C3 D4 AD 9E 9F
0020 | 59 2A 9E 0E 97 B3 E6 03 74 8B 67 63 BB E5 93 96
0030 | D6 24 9A 28 79 1F F0 70 61 A9 07 63 0C 8B FD 9E
0040 | 2E D7 28 5B 0B 4C C8 26</code></pre>
<p>Payload serialization:</p>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 CC C6 CE 59 9A 9C 64
0010 | 54 00 00 00 34 F7 CB 3B 61 07 9B D3 CE 40 0A AA
0020 | C0 6A 7E C0 F9 E7 0A F2 F3 3B CB F4 A8 C2 3D 6A
0030 | EE 2D 08 5D 77 13 F5 B1 C9 C0 EC 9D DD 5F 1A 18
0040 | 52 51 15 70 51 A6 94 1E</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;
dh_gen_retry#46dc1fb9 nonce:int128 server_nonce:int128 new_nonce_hash2:int128 = Set_client_DH_params_answer;
dh_gen_fail#a69dae02 nonce:int128 server_nonce:int128 new_nonce_hash3:int128 = Set_client_DH_params_answer;</code></pre>
@ -800,13 +821,13 @@ dh_gen_fail#a69dae02 nonce:int128 server_nonce:int128 new_nonce_hash3:int128 = S
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>019413B1C5909C64</code></td>
<td><code>01CCC6CE599A9C64</code></td>
<td>Exact <code>unixtime*2^32</code>, <code>+(4*N)</code> if N messages with the same message ID were already generated</td>
</tr>
<tr>
<td>message_length</td>
<td>16, 4</td>
<td><code>38000000</code> (56 in decimal)</td>
<td><code>54000000</code> (84 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -818,19 +839,19 @@ dh_gen_fail#a69dae02 nonce:int128 server_nonce:int128 new_nonce_hash3:int128 = S
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>DFD601C3D4AD9E9F592A9E0E97B3E603</code></td>
<td><code>61079BD3CE400AAAC06A7EC0F9E70AF2</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>748B6763BBE59396D6249A28791FF070</code></td>
<td><code>F33BCBF4A8C23D6AEE2D085D7713F5B1</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce_hash1</td>
<td>56, 16</td>
<td><code>61A907630C8BFD9E2ED7285B0B4CC826</code></td>
<td><code>C9C0EC9DDD5F1A185251157051A6941E</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>