Update content of files

This commit is contained in:
GitHub Action 2023-11-22 22:32:54 +00:00
parent c1bc119f74
commit 6b7b5bb0ec
5 changed files with 234 additions and 229 deletions

View file

@ -233,6 +233,23 @@ If the <code>unconfirmed</code> flag is set, clients should display a notificati
<p>If the user clicks on the Yes button, invoke <a href="/method/account.changeAuthorizationSettings">account.changeAuthorizationSettings</a> with the new session's <code>hash</code> and the <code>confirmed</code> flag set, confirming the specified session. </p>
<p>If the user clicks on the No button, invoke <a href="/method/account.resetAuthorization">account.resetAuthorization</a> with the new session's <code>hash</code>, logging out the specified session. </p>
<p>If no action is taken by the user, the session will be autoconfirmed <code>authorization_autoconfirm_period</code> seconds after login (see the associated <a href="/api/config#authorization-autoconfirm-period">client configuration parameter »</a>). </p>
<h3><a class="anchor" href="#invalidating-login-codes" id="invalidating-login-codes" name="invalidating-login-codes"><i class="anchor-icon"></i></a>Invalidating login codes</h3>
<p>Telegram's servers will automatically invalidate login codes if they are sent by the user to another Telegram chat, either by forwarding them or by sending them inside of a message: however, clients should also manually and immediately invalidate login codes if the user attempts to screenshot or forward a message sent by the login notification service user (ID <code>777000</code>) containing login codes. </p>
<p>If an incoming message that is:</p>
<ul>
<li>Sent by the login notification service user (ID <code>777000</code>)</li>
<li>AND is a text message (not a media)</li>
<li>AND contains one or more login codes, defined a sequence of 5 to 7 decimal digits, optionally interleaved with or followed by any number of <code>-</code> characters (<a href="https://github.com/tdlib/td/blob/07c1d53a6d3cb1fad58d2822e55eef6d57363581/td/telegram/MessagesManager.cpp#L6513">example implementation »</a>)</li>
</ul>
<p>Is either:</p>
<ul>
<li>Screenshotted by the user</li>
<li>OR forwarded by the user to any chat</li>
</ul>
<p><a href="/method/account.invalidateSignInCodes">account.invalidateSignInCodes</a> should be invoked, passing the extracted login <code>codes</code> (excluding any <code>-</code> characeters). </p>
<pre><code>---functions---
<a href='/method/account.invalidateSignInCodes'>account.invalidateSignInCodes</a>#ca8ae8ba codes:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/string'>string</a>&gt; = <a href='/type/Bool'>Bool</a>;</code></pre>
<h3><a class="anchor" href="#test-accounts" id="test-accounts" name="test-accounts"><i class="anchor-icon"></i></a>Test Accounts</h3>
<p>Each phone number is limited to only a certain amount of logins per day (e.g. 5, but this is subject to change) after which the API will return a FLOOD error until the next day. This might not be enough for testing the implementation of User Authorization flows in client applications.</p>
<p>There are several reserved phone number prefixes for testing that your application handles redirects between DCs, sign up, sign in and 2FA flows correctly. These numbers are only available on <strong>Test DCs</strong> (their IP addresses for TCP transport are available in <a href="https://my.telegram.org/apps">API development tools</a> panel after <a href="https://core.telegram.org/api/obtaining_api_id#obtaining-api-id">api_id was obtained</a>, <a href="https://core.telegram.org/mtproto/transports#uri-format">URI format</a> for HTTPS/WebSocket transport).</p>

View file

@ -364,7 +364,7 @@
<h4><a class="anchor" href="#schema-changes" id="schema-changes" name="schema-changes"><i class="anchor-icon"></i></a>Schema changes</h4>
<h5><a class="anchor" href="#new-methods" id="new-methods" name="new-methods"><i class="anchor-icon"></i></a>New Methods</h5>
<ul>
<li>Added <a href="/method/account.invalidateSignInCodes">account.invalidateSignInCodes</a> - </li>
<li>Added <a href="/method/account.invalidateSignInCodes">account.invalidateSignInCodes</a> - Invalidate the specified login codes, see <a href="/api/auth#invalidating-login-codes">here »</a> for more info.</li>
<li>Added <a href="/method/channels.clickSponsoredMessage">channels.clickSponsoredMessage</a> - </li>
</ul>
<h5><a class="anchor" href="#changed-methods" id="changed-methods" name="changed-methods"><i class="anchor-icon"></i></a>Changed Methods</h5>

View file

@ -4,26 +4,10 @@
<meta charset="utf-8">
<title>account.invalidateSignInCodes</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="description" content="Parameters
Name
Type
Description
codes
Vector&lt;string&gt;
 
Result
Bool">
<meta property="description" content="Invalidate the specified login codes, see here » for more info.">
<meta property="og:title" content="account.invalidateSignInCodes">
<meta property="og:image" content="">
<meta property="og:description" content="Parameters
Name
Type
Description
codes
Vector&lt;string&gt;
 
Result
Bool">
<meta property="og:description" content="Invalidate the specified login codes, see here » for more info.">
<link rel="icon" type="image/svg+xml" href="/img/website_icon.svg?4">
<link rel="apple-touch-icon" sizes="180x180" href="/img/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/img/favicon-32x32.png">
@ -58,7 +42,8 @@ Bool">
<div class="dev_page_bread_crumbs"><ul class="breadcrumb clearfix"><li><a href="/api" >API</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/methods" >All Methods</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/method/account.invalidateSignInCodes" >account.invalidateSignInCodes</a></li></ul></div>
<h1 id="dev_page_title">account.invalidateSignInCodes</h1>
<div id="dev_page_content"><p><div class="clearfix">
<div id="dev_page_content"><p>Invalidate the specified login codes, see <a href="/api/auth#invalidating-login-codes">here »</a> for more info.</p>
<p><div class="clearfix">
<ul class="dev_layer_select slightly-pull-right nav nav-pills">
<li class="dropdown">
<a class="dropdown-toggle" onclick="return dropdownClick(this, event)" href="#">Layer 164 <b class="caret"></b></a>
@ -87,12 +72,15 @@ Bool">
<tr>
<td><strong>codes</strong></td>
<td style="text-align: center;"><a href="/type/Vector%20t">Vector</a>&lt;<a href="/type/string">string</a>&gt;</td>
<td> </td>
<td>The login codes to invalidate.</td>
</tr>
</tbody>
</table>
<h3><a class="anchor" href="#result" id="result" name="result"><i class="anchor-icon"></i></a>Result</h3>
<p><a href="/type/Bool">Bool</a></p></div>
<p><a href="/type/Bool">Bool</a></p>
<h3><a class="anchor" href="#related-pages" id="related-pages" name="related-pages"><i class="anchor-icon"></i></a>Related pages</h3>
<h4><a class="anchor" href="#user-authorization" id="user-authorization" name="user-authorization"><i class="anchor-icon"></i></a><a href="/api/auth">User Authorization</a></h4>
<p>How to register a user's phone to start using the API.</p></div>
</div>

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 34 E8 06 00 79 78 5E 65
0010 | 14 00 00 00 F1 8E 7E BE 9E D2 F5 84 EA 8D 6F A9
0020 | FB BC 0C 3C B6 87 53 EE</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 A4 76 09 00 2B 80 5E 65
0010 | 14 00 00 00 F1 8E 7E BE B9 77 20 53 8F F9 BE 7C
0020 | 1C 0F 2D 85 09 9F E2 B2</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>34E8060079785E65</code></td>
<td><code>A47609002B805E65</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>9ED2F584EA8D6FA9FBBC0C3CB68753EE</code></td>
<td><code>B97720538FF9BE7C1C0F2D85099FE2B2</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 D0 91 DC 79 78 5E 65
0010 | 94 00 00 00 63 24 16 05 9E D2 F5 84 EA 8D 6F A9
0020 | FB BC 0C 3C B6 87 53 EE 86 E3 AD 1A CB CC D1 93
0030 | E8 5F 59 80 B3 27 7A 00 08 22 02 C8 34 E1 53 4B
0040 | E3 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 88 74 87 2B 80 5E 65
0010 | 74 00 00 00 63 24 16 05 B9 77 20 53 8F F9 BE 7C
0020 | 1C 0F 2D 85 09 9F E2 B2 B9 F1 49 F4 F7 59 81 C1
0030 | C6 97 0B 97 BE 0B 75 79 08 1F 3C DD F3 F5 5F F2
0040 | AF 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>01D091DC79785E65</code></td>
<td><code>018874872B805E65</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>94000000</code> (148 in decimal)</td>
<td><code>74000000</code> (116 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -150,19 +150,19 @@
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>9ED2F584EA8D6FA9FBBC0C3CB68753EE</code></td>
<td><code>B97720538FF9BE7C1C0F2D85099FE2B2</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>86E3AD1ACBCCD193E85F5980B3277A00</code></td>
<td><code>B9F149F4F75981C1C6970B97BE0B7579</code></td>
<td>Server-generated random number</td>
</tr>
<tr>
<td>pq</td>
<td>56, 12</td>
<td><code>082202C834E1534BE3000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2450741276687158243</td>
<td><code>081F3CDDF3F55FF2AF000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2250917953641902767</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 = 2450741276687158243</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>2450741276687158243 = 1480128193 * 1655762851</code></p>
<pre><code>p = 1480128193
q = 1655762851</code></pre>
<pre><code>pq = 2250917953641902767</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>2250917953641902767 = 1475963039 * 1525050353</code></p>
<pre><code>p = 1475963039
q = 1525050353</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 22 02 C8 34 E1 53 4B E3 00 00 00
0010 | 04 58 38 F6 C1 00 00 00 04 62 B0 EF A3 00 00 00
0020 | 9E D2 F5 84 EA 8D 6F A9 FB BC 0C 3C B6 87 53 EE
0030 | 86 E3 AD 1A CB CC D1 93 E8 5F 59 80 B3 27 7A 00
0040 | A3 CB A1 3D 34 D8 64 69 FB CC 3D E3 C4 A7 D4 22
0050 | 89 AE 34 44 7E 9A 10 B0 23 45 B0 60 A0 86 FC BF
<pre><code>0000 | 95 5F F5 A9 08 1F 3C DD F3 F5 5F F2 AF 00 00 00
0010 | 04 57 F9 68 9F 00 00 00 04 5A E6 6B F1 00 00 00
0020 | B9 77 20 53 8F F9 BE 7C 1C 0F 2D 85 09 9F E2 B2
0030 | B9 F1 49 F4 F7 59 81 C1 C6 97 0B 97 BE 0B 75 79
0040 | 1C A4 07 E6 67 EE 73 15 DC 50 68 74 45 55 AC 33
0050 | EE D3 35 45 5F 79 14 9A 13 34 B5 F5 65 84 5B EF
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 = 1655762851</code></pre>
<tr>
<td>pq</td>
<td>4, 12</td>
<td><code>082202C834E1534BE3000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2450741276687158243</td>
<td><code>081F3CDDF3F55FF2AF000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2250917953641902767</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>045838F6C1000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1480128193</td>
<td><code>0457F9689F000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1475963039</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>0462B0EFA3000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1655762851</td>
<td><code>045AE66BF1000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1525050353</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>9ED2F584EA8D6FA9FBBC0C3CB68753EE</code></td>
<td><code>B97720538FF9BE7C1C0F2D85099FE2B2</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>48, 16</td>
<td><code>86E3AD1ACBCCD193E85F5980B3277A00</code></td>
<td><code>B9F149F4F75981C1C6970B97BE0B7579</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce</td>
<td>64, 32</td>
<td><code>A3CBA13D34D86469FBCC3DE3C4A7D422</code> <code>89AE34447E9A10B02345B060A086FCBF</code></td>
<td><code>1CA407E667EE7315DC5068744555AC33</code> <code>EED335455F79149A1334B5F565845BEF</code></td>
<td>Client-generated random number</td>
</tr>
<tr>
@ -291,39 +291,39 @@ q = 1655762851</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 = 955FF5A9082202C834E1534BE3000000045838F6C10000000462B0EFA30000009ED2F584EA8D6FA9FBBC0C3CB68753EE86E3AD1ACBCCD193E85F5980B3277A00A3CBA13D34D86469FBCC3DE3C4A7D42289AE34447E9A10B02345B060A086FCBF02000000
random_padding_bytes = 1142DD6B3DC4ADC50CC3B20931F03FAD2F58A5AC0EFD8724415D5D4CD3AADEC12AB77B68FA23AB6C4BD61593C56FC2CDC7500094189999DC0C3638922B46B07CFE65C2DCB2B99DAFD4F6DA6520119606CFA090FD3E7145B01676C39E</code></pre>
<pre><code>data = 955FF5A9081F3CDDF3F55FF2AF0000000457F9689F000000045AE66BF1000000B97720538FF9BE7C1C0F2D85099FE2B2B9F149F4F75981C1C6970B97BE0B75791CA407E667EE7315DC5068744555AC33EED335455F79149A1334B5F565845BEF02000000
random_padding_bytes = 5BB8B2F6F15C2FCD6BDEF289F6EB65EC90BFA6C48C185F5D609B0FF7689021475BEC462A9C82B5D3B057977305DE7300B840598F59AE5EC7EA1345C6187BF8B3988DAE77E834FCC8286ABE4E0C4054F4649CBDEE9364ACD8EEFE9DD1</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 = 3DF5BF94758DDF82CEDA146C9E09A2EEC36242D7B6A095FB4FE4266CB7CC6FFC6546FAE35E8D024485186D8D446F2B1590DC9A867C6A47D29177EEC49CEC419C964C8804CD3A8ED7B6F3B837AE9ACF9844EB3F5F23B13C423BF0F0D940F0BA472161E481186E9C28C6DBC10383DC95B72C9596415E8976192A9584A8FEF5A56BF186FF6A397235248AFB0990F1CA3C072FF28237AD3B73AC07E1720B8F9C8E70A71061EE7C06E3DEED3AD6844ECD2601E3EBBC19EB2B72F4B4CE16B68E8600166E89FF047933FA0627A168E8F99E899C5D3CB42E45268409AD121EF33378D0D8856B0BBA89824DAED93159E2480079A658CF4D431460FCA77F492A182508D9E0</code></pre>
<pre><code>encrypted_data = 41DAD62847B39899E5614117FB1DBDFD1B3553B41165FB4E87FD5CBC4AD720542AE387B8E61471A867701DE9381B4893478A6E35420ED7502412083F49F05B92150DFB2B593CE346B3EB9927A55D7C4448C48810BDC71A5FDD63024D18013B66A14C35B23B748508EA04C2F2F23EC64A3EA0B2428E017774C24E031B4E612FD281AB68E9A80F3D2C44B5AD768FDF3DB6D756E7D90BF4C7EBFF1D9B3D40A6137980B75EB017D0ABA59459E6B0126E3F25055B0DE4F1A1043C573D4710160BFA549837668DF4B1BB8C50E67BEF4084AD4CCABFD76D6DC61FE43D8C386530293FD6E257E415695CDC40738BC634784EFEDA8913426904E142F157F418DF162679B0</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 00 53 0A 00 79 78 5E 65
0010 | 40 01 00 00 BE E4 12 D7 9E D2 F5 84 EA 8D 6F A9
0020 | FB BC 0C 3C B6 87 53 EE 86 E3 AD 1A CB CC D1 93
0030 | E8 5F 59 80 B3 27 7A 00 04 58 38 F6 C1 00 00 00
0040 | 04 62 B0 EF A3 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 3D F5 BF 94 75 8D DF 82 CE DA 14 6C
0060 | 9E 09 A2 EE C3 62 42 D7 B6 A0 95 FB 4F E4 26 6C
0070 | B7 CC 6F FC 65 46 FA E3 5E 8D 02 44 85 18 6D 8D
0080 | 44 6F 2B 15 90 DC 9A 86 7C 6A 47 D2 91 77 EE C4
0090 | 9C EC 41 9C 96 4C 88 04 CD 3A 8E D7 B6 F3 B8 37
00A0 | AE 9A CF 98 44 EB 3F 5F 23 B1 3C 42 3B F0 F0 D9
00B0 | 40 F0 BA 47 21 61 E4 81 18 6E 9C 28 C6 DB C1 03
00C0 | 83 DC 95 B7 2C 95 96 41 5E 89 76 19 2A 95 84 A8
00D0 | FE F5 A5 6B F1 86 FF 6A 39 72 35 24 8A FB 09 90
00E0 | F1 CA 3C 07 2F F2 82 37 AD 3B 73 AC 07 E1 72 0B
00F0 | 8F 9C 8E 70 A7 10 61 EE 7C 06 E3 DE ED 3A D6 84
0100 | 4E CD 26 01 E3 EB BC 19 EB 2B 72 F4 B4 CE 16 B6
0110 | 8E 86 00 16 6E 89 FF 04 79 33 FA 06 27 A1 68 E8
0120 | F9 9E 89 9C 5D 3C B4 2E 45 26 84 09 AD 12 1E F3
0130 | 33 78 D0 D8 85 6B 0B BA 89 82 4D AE D9 31 59 E2
0140 | 48 00 79 A6 58 CF 4D 43 14 60 FC A7 7F 49 2A 18
0150 | 25 08 D9 E0</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 6C F9 0A 00 2B 80 5E 65
0010 | 40 01 00 00 BE E4 12 D7 B9 77 20 53 8F F9 BE 7C
0020 | 1C 0F 2D 85 09 9F E2 B2 B9 F1 49 F4 F7 59 81 C1
0030 | C6 97 0B 97 BE 0B 75 79 04 57 F9 68 9F 00 00 00
0040 | 04 5A E6 6B F1 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 41 DA D6 28 47 B3 98 99 E5 61 41 17
0060 | FB 1D BD FD 1B 35 53 B4 11 65 FB 4E 87 FD 5C BC
0070 | 4A D7 20 54 2A E3 87 B8 E6 14 71 A8 67 70 1D E9
0080 | 38 1B 48 93 47 8A 6E 35 42 0E D7 50 24 12 08 3F
0090 | 49 F0 5B 92 15 0D FB 2B 59 3C E3 46 B3 EB 99 27
00A0 | A5 5D 7C 44 48 C4 88 10 BD C7 1A 5F DD 63 02 4D
00B0 | 18 01 3B 66 A1 4C 35 B2 3B 74 85 08 EA 04 C2 F2
00C0 | F2 3E C6 4A 3E A0 B2 42 8E 01 77 74 C2 4E 03 1B
00D0 | 4E 61 2F D2 81 AB 68 E9 A8 0F 3D 2C 44 B5 AD 76
00E0 | 8F DF 3D B6 D7 56 E7 D9 0B F4 C7 EB FF 1D 9B 3D
00F0 | 40 A6 13 79 80 B7 5E B0 17 D0 AB A5 94 59 E6 B0
0100 | 12 6E 3F 25 05 5B 0D E4 F1 A1 04 3C 57 3D 47 10
0110 | 16 0B FA 54 98 37 66 8D F4 B1 BB 8C 50 E6 7B EF
0120 | 40 84 AD 4C CA BF D7 6D 6D C6 1F E4 3D 8C 38 65
0130 | 30 29 3F D6 E2 57 E4 15 69 5C DC 40 73 8B C6 34
0140 | 78 4E FE DA 89 13 42 69 04 E1 42 F1 57 F4 18 DF
0150 | 16 26 79 B0</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 = 1142DD6B3DC4ADC50CC3B20931F03FAD2F58A5AC0EFD8724415D5D4CD
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>00530A0079785E65</code></td>
<td><code>6CF90A002B805E65</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 = 1142DD6B3DC4ADC50CC3B20931F03FAD2F58A5AC0EFD8724415D5D4CD
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>9ED2F584EA8D6FA9FBBC0C3CB68753EE</code></td>
<td><code>B97720538FF9BE7C1C0F2D85099FE2B2</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>86E3AD1ACBCCD193E85F5980B3277A00</code></td>
<td><code>B9F149F4F75981C1C6970B97BE0B7579</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>p</td>
<td>56, 8</td>
<td><code>045838F6C1000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1480128193</td>
<td><code>0457F9689F000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1475963039</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>0462B0EFA3000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1655762851</td>
<td><code>045AE66BF1000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1525050353</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 = 1142DD6B3DC4ADC50CC3B20931F03FAD2F58A5AC0EFD8724415D5D4CD
<tr>
<td>encrypted_data</td>
<td>80, 260</td>
<td><code>FE0001003DF5BF94758DDF82CEDA146C</code> <code>9E09A2EEC36242D7B6A095FB4FE4266C</code> <code>B7CC6FFC6546FAE35E8D024485186D8D</code> <code>446F2B1590DC9A867C6A47D29177EEC4</code> <code>9CEC419C964C8804CD3A8ED7B6F3B837</code> <code>AE9ACF9844EB3F5F23B13C423BF0F0D9</code> <code>40F0BA472161E481186E9C28C6DBC103</code> <code>83DC95B72C9596415E8976192A9584A8</code> <code>FEF5A56BF186FF6A397235248AFB0990</code> <code>F1CA3C072FF28237AD3B73AC07E1720B</code> <code>8F9C8E70A71061EE7C06E3DEED3AD684</code> <code>4ECD2601E3EBBC19EB2B72F4B4CE16B6</code> <code>8E8600166E89FF047933FA0627A168E8</code> <code>F99E899C5D3CB42E45268409AD121EF3</code> <code>3378D0D8856B0BBA89824DAED93159E2</code> <code>480079A658CF4D431460FCA77F492A18</code><br> <code>2508D9E0</code></td>
<td><code>FE00010041DAD62847B39899E5614117</code> <code>FB1DBDFD1B3553B41165FB4E87FD5CBC</code> <code>4AD720542AE387B8E61471A867701DE9</code> <code>381B4893478A6E35420ED7502412083F</code> <code>49F05B92150DFB2B593CE346B3EB9927</code> <code>A55D7C4448C48810BDC71A5FDD63024D</code> <code>18013B66A14C35B23B748508EA04C2F2</code> <code>F23EC64A3EA0B2428E017774C24E031B</code> <code>4E612FD281AB68E9A80F3D2C44B5AD76</code> <code>8FDF3DB6D756E7D90BF4C7EBFF1D9B3D</code> <code>40A6137980B75EB017D0ABA59459E6B0</code> <code>126E3F25055B0DE4F1A1043C573D4710</code> <code>160BFA549837668DF4B1BB8C50E67BEF</code> <code>4084AD4CCABFD76D6DC61FE43D8C3865</code> <code>30293FD6E257E415695CDC40738BC634</code> <code>784EFEDA8913426904E142F157F418DF</code><br> <code>162679B0</code></td>
<td>Value generated above</td>
</tr>
</tbody>
@ -402,47 +402,47 @@ random_padding_bytes = 1142DD6B3DC4ADC50CC3B20931F03FAD2F58A5AC0EFD8724415D5D4CD
<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 08 FD 92 7A 78 5E 65
0010 | EC 02 00 00 5C 07 E8 D0 9E D2 F5 84 EA 8D 6F A9
0020 | FB BC 0C 3C B6 87 53 EE 86 E3 AD 1A CB CC D1 93
0030 | E8 5F 59 80 B3 27 7A 00 FE 50 02 00 83 63 2B B8
0040 | C0 4A AE 42 82 1A 1B 00 22 81 B1 D6 DE FA C1 A1
0050 | 0D DC FE 59 2D 5D 9C 89 7D C8 7F CC 63 EF 95 87
0060 | F2 58 48 F5 CB 76 D2 50 64 5C 3A BE F7 F6 12 06
0070 | 34 97 BC A6 27 FC 94 A2 0E D4 8C 9F 39 BB 87 BE
0080 | A1 F0 BB C0 24 87 53 7C 67 78 3C 62 EC D4 64 E2
0090 | 4F B3 BF F3 6E 40 4D AA D3 81 3E A5 44 6F 03 45
00A0 | 4B 2B 11 5C 15 08 13 D5 5D 8D E1 16 2E 3B 4B 45
00B0 | 81 B7 06 E6 46 43 05 D5 60 C5 5F B4 9B A9 78 4C
00C0 | FA 34 FF 0A 36 EC 7B AF F8 0A 27 28 1C 04 4C 5E
00D0 | 10 12 BD 7D DD 8F 12 7A 1C EC EE 47 FE 38 25 65
00E0 | 8F 19 87 19 78 03 CF 8F BA 3D 3E 92 E4 49 81 C4
00F0 | 31 0C 96 F4 23 CD 7C 92 8C 60 8E 04 47 DA 30 A5
0100 | 09 6B 1E 12 38 44 E0 AE 73 8C 0A AC 35 24 8A 38
0110 | C6 FC B2 3C 0E D2 89 AC 65 0D 0E C3 8A E5 FF 21
0120 | 41 46 4C 74 00 93 D3 71 08 CA 43 A9 7C A7 92 33
0130 | 2C A3 1D AD 03 7C BE E3 7D D3 3E 8E DB 53 A5 5E
0140 | B1 BF E6 AB 1D 98 7F 40 E0 AB C7 BB DB 10 23 23
0150 | F8 40 00 F3 C9 DF 07 98 3D 42 F4 D3 DA 28 AB 46
0160 | AC 01 13 70 6C 8E EE B2 95 A7 90 85 67 19 46 01
0170 | FF F4 BC 86 4A D1 BC 40 12 8F 50 AE 18 8C 1B 38
0180 | 37 85 7B C8 BD 7E 56 E3 58 D8 33 A0 7A BF 42 C6
0190 | 63 A5 47 DC EB E5 51 06 9B A3 AD 8B D8 D1 EC FA
01A0 | 9A 1B 93 7E 01 BE 10 33 70 82 E5 04 F3 A5 EC 94
01B0 | 74 26 38 87 49 15 0D AD 76 A2 CD BA 44 41 3A 9C
01C0 | 8D 02 84 88 69 73 49 E1 BD 30 B5 F3 B3 89 6C A4
01D0 | E4 B5 96 D5 44 E9 F0 23 B6 D2 98 45 3E 2F F3 70
01E0 | ED CD EF 86 79 D0 84 F3 D4 A6 1A AA F2 09 C6 6A
01F0 | 73 BA 25 F6 40 E1 B9 EA 42 1E FE 71 C9 5A 5D 7F
0200 | 48 32 A5 96 8D 5E B8 D4 D2 ED 21 80 3D 09 06 4E
0210 | C8 77 50 39 37 66 BD 9E CB 89 A9 39 A3 32 46 37
0220 | 23 36 29 42 62 E7 7F AD 40 67 6B 7F 17 B1 4B D7
0230 | 2C 68 9E 43 AB 0F 4C F4 F9 ED 3A 95 1C 3D 38 DA
0240 | 6B 76 A8 61 31 1D 2E 1F F6 6E EF 5E 7E 63 A5 39
0250 | 33 FD 4E C4 6A 3C 4B 14 57 84 CA EE 37 3A 25 CD
0260 | 6A B8 2A AE BD 13 0F 9C 6D 50 2D EE 95 59 01 32
0270 | 7C 13 CE C8 35 0C 05 18 96 99 D5 7E BE 94 ED 7D
0280 | 6B A6 FB 93 8F 60 5A C9 B2 F3 54 D8</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 6C BC 21 2C 80 5E 65
0010 | E8 02 00 00 5C 07 E8 D0 B9 77 20 53 8F F9 BE 7C
0020 | 1C 0F 2D 85 09 9F E2 B2 B9 F1 49 F4 F7 59 81 C1
0030 | C6 97 0B 97 BE 0B 75 79 FE 50 02 00 19 A9 47 72
0040 | D9 DF 71 D9 84 8C DC 10 AE 1C 1F 8A 82 E4 05 B0
0050 | 2C 4A 9C 80 06 7F 9C D2 64 E6 E8 2C 18 56 EC DE
0060 | 45 C2 81 15 E5 F8 7C FD C2 FC 19 32 40 A1 CD D2
0070 | 7D 0C FB 7A 46 67 58 2D 4C 17 FC 68 EF BE 09 4C
0080 | 1C 55 BD 09 FE 7E 86 E1 4E 33 0E 56 76 DC 88 A9
0090 | 1A 0C 40 1C 12 DC 97 A8 EF 8B 55 DE 00 66 00 4E
00A0 | B0 A6 95 E7 52 60 63 46 C4 3E 90 B6 94 21 BE 21
00B0 | C3 44 72 58 68 6C 21 DB 3A 8B 70 55 C9 BB E5 F3
00C0 | 04 83 05 9A F4 91 72 D1 BF 9E C1 AB 19 30 3A FD
00D0 | 9F E0 64 EE A9 A3 4C EA 9A 65 1B FE 2A A4 6F 0C
00E0 | 8F B7 8C 60 18 68 52 10 A2 00 A5 B3 50 C5 34 51
00F0 | 4D 00 F0 F6 AE A9 F3 A8 65 73 69 9B 80 CE 59 92
0100 | CD 5F 53 07 22 F3 5F A2 B2 55 1C CF B9 E6 F3 21
0110 | EE F4 6D FF 68 E5 10 A8 35 85 F3 04 DF 62 06 8B
0120 | 34 B5 CA B0 74 39 F8 5E 00 55 B5 BB 96 B9 E3 E5
0130 | A8 F5 1B 5C 12 84 C4 2D EC C5 FF 39 13 6D 74 90
0140 | 1A 4B 8A 29 4B 8F B7 1C 01 47 CD E0 7A 1F 10 E6
0150 | 1F DD B2 1B 7F 88 78 AB AF D6 AF 70 C0 2E 55 EF
0160 | 01 DF 46 C4 3A BA 72 E7 04 61 1E 35 B6 3B 8D 30
0170 | 87 B2 1D 04 F6 D8 36 45 2D 30 7A 64 B8 99 68 A1
0180 | E6 A6 7A 0E 3E 21 7D 61 ED 5B 5B B0 94 6D 5E 72
0190 | BE F7 73 BA 84 0A 77 FE F6 29 CD 2C 0C 47 02 15
01A0 | 77 1F EE 3B 21 A2 31 EB 50 9E 0A 93 B6 54 97 A4
01B0 | CF 16 4C CE 51 9B A2 35 7C A0 8D 61 60 F2 F0 B2
01C0 | 1F B8 71 53 EB 8F 00 D2 54 E7 D5 EF 50 37 4D 07
01D0 | 16 94 28 B6 E7 95 B6 94 FB 16 FF 7F 53 AE 0A F5
01E0 | DC E7 0E 0C 30 76 E2 52 62 F2 1B C8 38 9D 02 72
01F0 | 2B 05 13 C8 8E 3F C8 5B 75 3F 20 7F 12 B5 EB 98
0200 | 79 FC C3 EF F5 85 B3 91 57 7B 57 38 72 97 49 DD
0210 | 99 22 09 13 7A 5E 1F 0D C5 D7 B1 F1 33 C3 3B C8
0220 | BD DD E1 5E DD 41 BB 71 BE 72 E5 89 CA 84 AB E7
0230 | 9C DA A5 5A EA F5 66 FC 24 8B 81 6C 1F 6F 5D FA
0240 | 40 CA 09 3D F3 05 A6 CA 20 7B FD 88 A9 81 1F 77
0250 | 77 86 6C C2 85 82 25 3E A5 FE D7 C0 AE 77 B5 53
0260 | 43 36 EB 3E 13 F2 4C BE 88 6C 35 54 F5 6D 38 A3
0270 | 9A 71 1A 98 96 D5 7B 56 55 16 E5 59 87 0F 26 8C
0280 | 21 D0 84 F1 26 C8 64 21 2D 9C 73 A8</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 = 1142DD6B3DC4ADC50CC3B20931F03FAD2F58A5AC0EFD8724415D5D4CD
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>0108FD927A785E65</code></td>
<td><code>016CBC212C805E65</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>EC020000</code> (748 in decimal)</td>
<td><code>E8020000</code> (744 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -482,19 +482,19 @@ random_padding_bytes = 1142DD6B3DC4ADC50CC3B20931F03FAD2F58A5AC0EFD8724415D5D4CD
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>9ED2F584EA8D6FA9FBBC0C3CB68753EE</code></td>
<td><code>B97720538FF9BE7C1C0F2D85099FE2B2</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>86E3AD1ACBCCD193E85F5980B3277A00</code></td>
<td><code>B9F149F4F75981C1C6970B97BE0B7579</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_answer</td>
<td>56, 596</td>
<td><code>FE50020083632BB8C04AAE42821A1B00</code> <code>2281B1D6DEFAC1A10DDCFE592D5D9C89</code> <code>7DC87FCC63EF9587F25848F5CB76D250</code> <code>645C3ABEF7F612063497BCA627FC94A2</code> <code>0ED48C9F39BB87BEA1F0BBC02487537C</code> <code>67783C62ECD464E24FB3BFF36E404DAA</code> <code>D3813EA5446F03454B2B115C150813D5</code> <code>5D8DE1162E3B4B4581B706E6464305D5</code> <code>60C55FB49BA9784CFA34FF0A36EC7BAF</code> <code>F80A27281C044C5E1012BD7DDD8F127A</code> <code>1CECEE47FE3825658F1987197803CF8F</code> <code>BA3D3E92E44981C4310C96F423CD7C92</code> <code>8C608E0447DA30A5096B1E123844E0AE</code> <code>738C0AAC35248A38C6FCB23C0ED289AC</code> <code>650D0EC38AE5FF2141464C740093D371</code> <code>08CA43A97CA792332CA31DAD037CBEE3</code> <code>7DD33E8EDB53A55EB1BFE6AB1D987F40</code> <code>E0ABC7BBDB102323F84000F3C9DF0798</code> <code>3D42F4D3DA28AB46AC0113706C8EEEB2</code> <code>95A7908567194601FFF4BC864AD1BC40</code> <code>128F50AE188C1B3837857BC8BD7E56E3</code> <code>58D833A07ABF42C663A547DCEBE55106</code> <code>9BA3AD8BD8D1ECFA9A1B937E01BE1033</code> <code>7082E504F3A5EC947426388749150DAD</code> <code>76A2CDBA44413A9C8D028488697349E1</code> <code>BD30B5F3B3896CA4E4B596D544E9F023</code> <code>B6D298453E2FF370EDCDEF8679D084F3</code> <code>D4A61AAAF209C66A73BA25F640E1B9EA</code> <code>421EFE71C95A5D7F4832A5968D5EB8D4</code> <code>D2ED21803D09064EC87750393766BD9E</code> <code>CB89A939A33246372336294262E77FAD</code> <code>40676B7F17B14BD72C689E43AB0F4CF4</code> <code>F9ED3A951C3D38DA6B76A861311D2E1F</code> <code>F66EEF5E7E63A53933FD4EC46A3C4B14</code> <code>5784CAEE373A25CD6AB82AAEBD130F9C</code> <code>6D502DEE955901327C13CEC8350C0518</code> <code>9699D57EBE94ED7D6BA6FB938F605AC9</code><br> <code>B2F354D8</code></td>
<td><code>FE50020019A94772D9DF71D9848CDC10</code> <code>AE1C1F8A82E405B02C4A9C80067F9CD2</code> <code>64E6E82C1856ECDE45C28115E5F87CFD</code> <code>C2FC193240A1CDD27D0CFB7A4667582D</code> <code>4C17FC68EFBE094C1C55BD09FE7E86E1</code> <code>4E330E5676DC88A91A0C401C12DC97A8</code> <code>EF8B55DE0066004EB0A695E752606346</code> <code>C43E90B69421BE21C3447258686C21DB</code> <code>3A8B7055C9BBE5F30483059AF49172D1</code> <code>BF9EC1AB19303AFD9FE064EEA9A34CEA</code> <code>9A651BFE2AA46F0C8FB78C6018685210</code> <code>A200A5B350C534514D00F0F6AEA9F3A8</code> <code>6573699B80CE5992CD5F530722F35FA2</code> <code>B2551CCFB9E6F321EEF46DFF68E510A8</code> <code>3585F304DF62068B34B5CAB07439F85E</code> <code>0055B5BB96B9E3E5A8F51B5C1284C42D</code> <code>ECC5FF39136D74901A4B8A294B8FB71C</code> <code>0147CDE07A1F10E61FDDB21B7F8878AB</code> <code>AFD6AF70C02E55EF01DF46C43ABA72E7</code> <code>04611E35B63B8D3087B21D04F6D83645</code> <code>2D307A64B89968A1E6A67A0E3E217D61</code> <code>ED5B5BB0946D5E72BEF773BA840A77FE</code> <code>F629CD2C0C470215771FEE3B21A231EB</code> <code>509E0A93B65497A4CF164CCE519BA235</code> <code>7CA08D6160F2F0B21FB87153EB8F00D2</code> <code>54E7D5EF50374D07169428B6E795B694</code> <code>FB16FF7F53AE0AF5DCE70E0C3076E252</code> <code>62F21BC8389D02722B0513C88E3FC85B</code> <code>753F207F12B5EB9879FCC3EFF585B391</code> <code>577B5738729749DD992209137A5E1F0D</code> <code>C5D7B1F133C33BC8BDDDE15EDD41BB71</code> <code>BE72E589CA84ABE79CDAA55AEAF566FC</code> <code>248B816C1F6F5DFA40CA093DF305A6CA</code> <code>207BFD88A9811F7777866CC28582253E</code> <code>A5FED7C0AE77B5534336EB3E13F24CBE</code> <code>886C3554F56D38A39A711A9896D57B56</code> <code>5516E559870F268C21D084F126C86421</code><br> <code>2D9C73A8</code></td>
<td>See below</td>
</tr>
</tbody>
@ -502,20 +502,20 @@ random_padding_bytes = 1142DD6B3DC4ADC50CC3B20931F03FAD2F58A5AC0EFD8724415D5D4CD
<!-- 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 = 83632BB8C04AAE42821A1B002281B1D6DEFAC1A10DDCFE592D5D9C897DC87FCC63EF9587F25848F5CB76D250645C3ABEF7F612063497BCA627FC94A20ED48C9F39BB87BEA1F0BBC02487537C67783C62ECD464E24FB3BFF36E404DAAD3813EA5446F03454B2B115C150813D55D8DE1162E3B4B4581B706E6464305D560C55FB49BA9784CFA34FF0A36EC7BAFF80A27281C044C5E1012BD7DDD8F127A1CECEE47FE3825658F1987197803CF8FBA3D3E92E44981C4310C96F423CD7C928C608E0447DA30A5096B1E123844E0AE738C0AAC35248A38C6FCB23C0ED289AC650D0EC38AE5FF2141464C740093D37108CA43A97CA792332CA31DAD037CBEE37DD33E8EDB53A55EB1BFE6AB1D987F40E0ABC7BBDB102323F84000F3C9DF07983D42F4D3DA28AB46AC0113706C8EEEB295A7908567194601FFF4BC864AD1BC40128F50AE188C1B3837857BC8BD7E56E358D833A07ABF42C663A547DCEBE551069BA3AD8BD8D1ECFA9A1B937E01BE10337082E504F3A5EC947426388749150DAD76A2CDBA44413A9C8D028488697349E1BD30B5F3B3896CA4E4B596D544E9F023B6D298453E2FF370EDCDEF8679D084F3D4A61AAAF209C66A73BA25F640E1B9EA421EFE71C95A5D7F4832A5968D5EB8D4D2ED21803D09064EC87750393766BD9ECB89A939A33246372336294262E77FAD40676B7F17B14BD72C689E43AB0F4CF4F9ED3A951C3D38DA6B76A861311D2E1FF66EEF5E7E63A53933FD4EC46A3C4B145784CAEE373A25CD6AB82AAEBD130F9C6D502DEE955901327C13CEC8350C05189699D57EBE94ED7D6BA6FB938F605AC9B2F354D8
tmp_aes_key = 99CCA58E7584C1EE1903081987F4183B912B1AE70BB654F456246DC0B30EF7BC
tmp_aes_iv = 116AD638FEE958A8C07EB2FF218C4F69AEB73C67B95A2D596BAC4C2CA3CBA13D</code></pre>
<pre><code>encrypted_answer = 19A94772D9DF71D9848CDC10AE1C1F8A82E405B02C4A9C80067F9CD264E6E82C1856ECDE45C28115E5F87CFDC2FC193240A1CDD27D0CFB7A4667582D4C17FC68EFBE094C1C55BD09FE7E86E14E330E5676DC88A91A0C401C12DC97A8EF8B55DE0066004EB0A695E752606346C43E90B69421BE21C3447258686C21DB3A8B7055C9BBE5F30483059AF49172D1BF9EC1AB19303AFD9FE064EEA9A34CEA9A651BFE2AA46F0C8FB78C6018685210A200A5B350C534514D00F0F6AEA9F3A86573699B80CE5992CD5F530722F35FA2B2551CCFB9E6F321EEF46DFF68E510A83585F304DF62068B34B5CAB07439F85E0055B5BB96B9E3E5A8F51B5C1284C42DECC5FF39136D74901A4B8A294B8FB71C0147CDE07A1F10E61FDDB21B7F8878ABAFD6AF70C02E55EF01DF46C43ABA72E704611E35B63B8D3087B21D04F6D836452D307A64B89968A1E6A67A0E3E217D61ED5B5BB0946D5E72BEF773BA840A77FEF629CD2C0C470215771FEE3B21A231EB509E0A93B65497A4CF164CCE519BA2357CA08D6160F2F0B21FB87153EB8F00D254E7D5EF50374D07169428B6E795B694FB16FF7F53AE0AF5DCE70E0C3076E25262F21BC8389D02722B0513C88E3FC85B753F207F12B5EB9879FCC3EFF585B391577B5738729749DD992209137A5E1F0DC5D7B1F133C33BC8BDDDE15EDD41BB71BE72E589CA84ABE79CDAA55AEAF566FC248B816C1F6F5DFA40CA093DF305A6CA207BFD88A9811F7777866CC28582253EA5FED7C0AE77B5534336EB3E13F24CBE886C3554F56D38A39A711A9896D57B565516E559870F268C21D084F126C864212D9C73A8
tmp_aes_key = AA8882764BC26DFE930BE3FB9AA4E2184C5765AA0AA9595FF95C3E95A2284393
tmp_aes_iv = F6EA80B37B880959A2DAD4F084F26E88853A15B5BBC5F1FAC00383C91CA407E6</code></pre>
<!-- end server_DH_inner_data_input -->
<p>Yielding:</p>
<!-- start server_DH_inner_data_output -->
<pre><code>answer_with_hash = A4E6837A9535664B7F4DFEE7AEB23B17B430319ABA0D89B59ED2F584EA8D6FA9FBBC0C3CB68753EE86E3AD1ACBCCD193E85F5980B3277A0003000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE0001004C398589774D1EE9C58C3B5D7971D0C1523ACD94534C83BE3415E324ED48EC51934F6AFA7AA13E5A063F5962CE16AF8CE2952B1C6CDFCCF6F7FDEEB5880DC8AA0832A3362C05318C1F6CCB11CE506DBA4C8D1D44BE78B949652CD93988899FF9448770E8E5F56F208E68B0FE339C65D93B37C3ABE1C8B02CFFF24674D30B1FB4D190B7B810884E94C761B166DB3A31440363B8EBCB8A177604AD57C362FC172F8990A1EBC5436EA56F149BCDC56320A7DC0C9DF5C347FED9285DCBF14B5CA0FE59F9D064BECC5EE25FEBB1D0FDC5D8A72BC4665CC068BFFF7FAE9838DF3B7F5C91F91EEC3886EC383443F2BFED145A651F20CEE50B007003EBD9E0D606D3D4EC7A785E65711F1E5835C05429
answer = BA0D89B59ED2F584EA8D6FA9FBBC0C3CB68753EE86E3AD1ACBCCD193E85F5980B3277A0003000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE0001004C398589774D1EE9C58C3B5D7971D0C1523ACD94534C83BE3415E324ED48EC51934F6AFA7AA13E5A063F5962CE16AF8CE2952B1C6CDFCCF6F7FDEEB5880DC8AA0832A3362C05318C1F6CCB11CE506DBA4C8D1D44BE78B949652CD93988899FF9448770E8E5F56F208E68B0FE339C65D93B37C3ABE1C8B02CFFF24674D30B1FB4D190B7B810884E94C761B166DB3A31440363B8EBCB8A177604AD57C362FC172F8990A1EBC5436EA56F149BCDC56320A7DC0C9DF5C347FED9285DCBF14B5CA0FE59F9D064BECC5EE25FEBB1D0FDC5D8A72BC4665CC068BFFF7FAE9838DF3B7F5C91F91EEC3886EC383443F2BFED145A651F20CEE50B007003EBD9E0D606D3D4EC7A785E65711F1E5835C05429</code></pre>
<pre><code>answer_with_hash = 32998DCF6AF6467851C4C9A73FE906A83024D162BA0D89B5B97720538FF9BE7C1C0F2D85099FE2B2B9F149F4F75981C1C6970B97BE0B757903000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE0001008E277E51724573843F071F72D2ACAE8B5BCACD92CDEF10EBC446DBF6D6A2035AB7B9222DE61BBAF79960672300C4D4DCC2538A6490F0FBB861902124922A8F0B9A32CAD60010187048FBC5D5D53C858C4EF7BB24E65985B836D3A66A6462FD4EA04110D58E52468DD0C4CAFB92D8730F41DBC154FF965DBA85E22605225C5A17F1679E3C4E3DAF63EBF91DC2D65D340FC64F76A391E5C5A4AAE0A0BB3445521CCA868F5BDCDF8C42547684F4DF318564572D57FFA83E165C14B465527BA45C0109FD0F3720C0B0B3FE5907B3F74FD989FA0071D2E9327FA3961020854683A98E2B88F8F3112CA74E8834D4ADB0FDAADD8FBEF1057DC03D68E05C0338614725122C805E651DAAA8B0951CE4BD
answer = BA0D89B5B97720538FF9BE7C1C0F2D85099FE2B2B9F149F4F75981C1C6970B97BE0B757903000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE0001008E277E51724573843F071F72D2ACAE8B5BCACD92CDEF10EBC446DBF6D6A2035AB7B9222DE61BBAF79960672300C4D4DCC2538A6490F0FBB861902124922A8F0B9A32CAD60010187048FBC5D5D53C858C4EF7BB24E65985B836D3A66A6462FD4EA04110D58E52468DD0C4CAFB92D8730F41DBC154FF965DBA85E22605225C5A17F1679E3C4E3DAF63EBF91DC2D65D340FC64F76A391E5C5A4AAE0A0BB3445521CCA868F5BDCDF8C42547684F4DF318564572D57FFA83E165C14B465527BA45C0109FD0F3720C0B0B3FE5907B3F74FD989FA0071D2E9327FA3961020854683A98E2B88F8F3112CA74E8834D4ADB0FDAADD8FBEF1057DC03D68E05C0338614725122C805E651DAAA8B0951CE4BD</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 9E D2 F5 84 EA 8D 6F A9 FB BC 0C 3C
0010 | B6 87 53 EE 86 E3 AD 1A CB CC D1 93 E8 5F 59 80
0020 | B3 27 7A 00 03 00 00 00 FE 00 01 00 C7 1C AE B9
<pre><code>0000 | BA 0D 89 B5 B9 77 20 53 8F F9 BE 7C 1C 0F 2D 85
0010 | 09 9F E2 B2 B9 F1 49 F4 F7 59 81 C1 C6 97 0B 97
0020 | BE 0B 75 79 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 = BA0D89B59ED2F584EA8D6FA9FBBC0C3CB68753EE86E3AD1ACBCCD193E85F5980B3277A0
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 | 4C 39 85 89 77 4D 1E E9 C5 8C 3B 5D 79 71 D0 C1
0140 | 52 3A CD 94 53 4C 83 BE 34 15 E3 24 ED 48 EC 51
0150 | 93 4F 6A FA 7A A1 3E 5A 06 3F 59 62 CE 16 AF 8C
0160 | E2 95 2B 1C 6C DF CC F6 F7 FD EE B5 88 0D C8 AA
0170 | 08 32 A3 36 2C 05 31 8C 1F 6C CB 11 CE 50 6D BA
0180 | 4C 8D 1D 44 BE 78 B9 49 65 2C D9 39 88 89 9F F9
0190 | 44 87 70 E8 E5 F5 6F 20 8E 68 B0 FE 33 9C 65 D9
01A0 | 3B 37 C3 AB E1 C8 B0 2C FF F2 46 74 D3 0B 1F B4
01B0 | D1 90 B7 B8 10 88 4E 94 C7 61 B1 66 DB 3A 31 44
01C0 | 03 63 B8 EB CB 8A 17 76 04 AD 57 C3 62 FC 17 2F
01D0 | 89 90 A1 EB C5 43 6E A5 6F 14 9B CD C5 63 20 A7
01E0 | DC 0C 9D F5 C3 47 FE D9 28 5D CB F1 4B 5C A0 FE
01F0 | 59 F9 D0 64 BE CC 5E E2 5F EB B1 D0 FD C5 D8 A7
0200 | 2B C4 66 5C C0 68 BF FF 7F AE 98 38 DF 3B 7F 5C
0210 | 91 F9 1E EC 38 86 EC 38 34 43 F2 BF ED 14 5A 65
0220 | 1F 20 CE E5 0B 00 70 03 EB D9 E0 D6 06 D3 D4 EC
0230 | 7A 78 5E 65</code></pre>
0130 | 8E 27 7E 51 72 45 73 84 3F 07 1F 72 D2 AC AE 8B
0140 | 5B CA CD 92 CD EF 10 EB C4 46 DB F6 D6 A2 03 5A
0150 | B7 B9 22 2D E6 1B BA F7 99 60 67 23 00 C4 D4 DC
0160 | C2 53 8A 64 90 F0 FB B8 61 90 21 24 92 2A 8F 0B
0170 | 9A 32 CA D6 00 10 18 70 48 FB C5 D5 D5 3C 85 8C
0180 | 4E F7 BB 24 E6 59 85 B8 36 D3 A6 6A 64 62 FD 4E
0190 | A0 41 10 D5 8E 52 46 8D D0 C4 CA FB 92 D8 73 0F
01A0 | 41 DB C1 54 FF 96 5D BA 85 E2 26 05 22 5C 5A 17
01B0 | F1 67 9E 3C 4E 3D AF 63 EB F9 1D C2 D6 5D 34 0F
01C0 | C6 4F 76 A3 91 E5 C5 A4 AA E0 A0 BB 34 45 52 1C
01D0 | CA 86 8F 5B DC DF 8C 42 54 76 84 F4 DF 31 85 64
01E0 | 57 2D 57 FF A8 3E 16 5C 14 B4 65 52 7B A4 5C 01
01F0 | 09 FD 0F 37 20 C0 B0 B3 FE 59 07 B3 F7 4F D9 89
0200 | FA 00 71 D2 E9 32 7F A3 96 10 20 85 46 83 A9 8E
0210 | 2B 88 F8 F3 11 2C A7 4E 88 34 D4 AD B0 FD AA DD
0220 | 8F BE F1 05 7D C0 3D 68 E0 5C 03 38 61 47 25 12
0230 | 2C 80 5E 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 = BA0D89B59ED2F584EA8D6FA9FBBC0C3CB68753EE86E3AD1ACBCCD193E85F5980B3277A0
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>9ED2F584EA8D6FA9FBBC0C3CB68753EE</code></td>
<td><code>B97720538FF9BE7C1C0F2D85099FE2B2</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>86E3AD1ACBCCD193E85F5980B3277A00</code></td>
<td><code>B9F149F4F75981C1C6970B97BE0B7579</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
@ -594,13 +594,13 @@ answer = BA0D89B59ED2F584EA8D6FA9FBBC0C3CB68753EE86E3AD1ACBCCD193E85F5980B3277A0
<tr>
<td>g_a</td>
<td>300, 260</td>
<td><code>FE0001004C398589774D1EE9C58C3B5D</code> <code>7971D0C1523ACD94534C83BE3415E324</code> <code>ED48EC51934F6AFA7AA13E5A063F5962</code> <code>CE16AF8CE2952B1C6CDFCCF6F7FDEEB5</code> <code>880DC8AA0832A3362C05318C1F6CCB11</code> <code>CE506DBA4C8D1D44BE78B949652CD939</code> <code>88899FF9448770E8E5F56F208E68B0FE</code> <code>339C65D93B37C3ABE1C8B02CFFF24674</code> <code>D30B1FB4D190B7B810884E94C761B166</code> <code>DB3A31440363B8EBCB8A177604AD57C3</code> <code>62FC172F8990A1EBC5436EA56F149BCD</code> <code>C56320A7DC0C9DF5C347FED9285DCBF1</code> <code>4B5CA0FE59F9D064BECC5EE25FEBB1D0</code> <code>FDC5D8A72BC4665CC068BFFF7FAE9838</code> <code>DF3B7F5C91F91EEC3886EC383443F2BF</code> <code>ED145A651F20CEE50B007003EBD9E0D6</code><br> <code>06D3D4EC</code></td>
<td><code>FE0001008E277E51724573843F071F72</code> <code>D2ACAE8B5BCACD92CDEF10EBC446DBF6</code> <code>D6A2035AB7B9222DE61BBAF799606723</code> <code>00C4D4DCC2538A6490F0FBB861902124</code> <code>922A8F0B9A32CAD60010187048FBC5D5</code> <code>D53C858C4EF7BB24E65985B836D3A66A</code> <code>6462FD4EA04110D58E52468DD0C4CAFB</code> <code>92D8730F41DBC154FF965DBA85E22605</code> <code>225C5A17F1679E3C4E3DAF63EBF91DC2</code> <code>D65D340FC64F76A391E5C5A4AAE0A0BB</code> <code>3445521CCA868F5BDCDF8C42547684F4</code> <code>DF318564572D57FFA83E165C14B46552</code> <code>7BA45C0109FD0F3720C0B0B3FE5907B3</code> <code>F74FD989FA0071D2E9327FA396102085</code> <code>4683A98E2B88F8F3112CA74E8834D4AD</code> <code>B0FDAADD8FBEF1057DC03D68E05C0338</code><br> <code>61472512</code></td>
<td><code>g_a</code> diffie-hellman parameter</td>
</tr>
<tr>
<td>server_time</td>
<td>560, 4</td>
<td><code>7A785E65</code> (1700690042 in decimal)</td>
<td><code>2C805E65</code> (1700692012 in decimal)</td>
<td>Server time</td>
</tr>
</tbody>
@ -609,34 +609,34 @@ answer = BA0D89B59ED2F584EA8D6FA9FBBC0C3CB68753EE86E3AD1ACBCCD193E85F5980B3277A0
<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 = BFEB74412651EE4B6ACA63489ED6458293D8F260002B655851B882DCDFDB02CD65C8C016FB08A7070382C8E1D4FABD2455BC16E7C10AC968CEAB96FC16FFA25D9C58012DEE4548D1A512BBDEAFF66E0B8722623B16BC496CE4A31E6B4914BD491137FFEAE4994D6817BEDB5304CBF1F4424AE94AC9BC75791F58C6726B5D6C44EBEEDA4F1426DEF6DEAB1F251AA0516A833B0932C9914B29312BCA4F983F5DB83CABFC6F55469C6CB235139838A1FD73BD4B05A5FF1EA08CB5EF2B1907E30959EEBF53CB807F40B1736D334784F7D12D38763A5DE16AF904AF4883A1BF8D8E49B0EB09337B0CB3634389507B90E338DBE8EBB54D19902A7D14BD26BEB09E2EED</code></pre>
<pre><code>b = 87DA6F6F3B4A7E0410514BD4842AEEDCE3CCD5D48F1DEDCF9FE4B40D26C54B801DA831774F7AAEABAFF900F17316615D91C80CED7EF7AD6B1EC6BF1D3DE93171C4CDE593B6F3FC56FD55DA1D446CB56F9C0842097DA51DFAF605B7D1694FC8AF1BAD75E6C14D10F557EE08A7B2976D6F2550B3A6F57C12A37EB7A623A465D283976FE30DC5ACBB0DE415996A0806130BBED0513647B03DDEEC52D7AFAC236416AF62E98C5774DE1845E16C1238BC09711A323C57A5B19671095B9C327022A760A156913735B39AD8D181DDB527F56DD97B59AABB1BDBCE6A8DC57222D3811C70E7CE84B32B1B729F52A3CD27CFE994734FE0559BC54A8042EADF70C418296BCB</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 = 05DC721E4B0B65C253CB91862BAAE2058D48F664B2ABE26C98900B0FFDB1A459CF301AE12C324998C3D6F31069D2A8E6EB7ACF242E6749CBB954526D27BB59DEE0E889CEB673705AFAA01CDB05B52FC65AAC0E0C5E1D0187E46A792E0F6F6B23898E3197AA69590110988D8F4A6658DA64A3CE8300FEEF763888D6D6CD3088A94191FEC20A2960709A75FE7583B0E5AECC25192646792C30899F7B05AB4A0EADC9345343E46F5E10719806A51D36A8377D8902069FCEC02B952141734B7100294B1A8434D6060D8E10D326CA9DADB0E89352A26ABFCBD7DCB448182C45E781081B0526B0CBC66AFE2E66242C43CC5412E3C0F0157B9D6F0FEADDD5D822922007</code></pre>
<pre><code>g_b = B845C908C2DD4A0A4D8DBB9636A32956ED87ACEBE67F864A5AC9E10F3D38F536A5F6C9BE77EF95A5E306D37C770ECC4551E8738E1F2CBBD4230139F21B143484C4EAEFB1B93120335461F34FE7BCDF38D4E481E025B2D626557B7AEBBE40275A1C05753AFADEF12F7851D06509F6282F3FD1EA225B5AA24A953FFAC11A26967DD3235C359465F0994539D19CD76EB5554D650A6B739C04E805963517877487E580FA3AD1BC38EF84A2EAAA5D057C89B19F6B26E39452BF0D2AB11D68FB16DA6D1DF9F485DC977F25A9FE974B25C9F875FD532E249307E29FB8A05A239A2B31DD8AE2B1C2D0E0625DEA4E60E006FE83C3C3454B463B38903A8F2F13A297C7080C</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 9E D2 F5 84 EA 8D 6F A9 FB BC 0C 3C
0010 | B6 87 53 EE 86 E3 AD 1A CB CC D1 93 E8 5F 59 80
0020 | B3 27 7A 00 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | 05 DC 72 1E 4B 0B 65 C2 53 CB 91 86 2B AA E2 05
0040 | 8D 48 F6 64 B2 AB E2 6C 98 90 0B 0F FD B1 A4 59
0050 | CF 30 1A E1 2C 32 49 98 C3 D6 F3 10 69 D2 A8 E6
0060 | EB 7A CF 24 2E 67 49 CB B9 54 52 6D 27 BB 59 DE
0070 | E0 E8 89 CE B6 73 70 5A FA A0 1C DB 05 B5 2F C6
0080 | 5A AC 0E 0C 5E 1D 01 87 E4 6A 79 2E 0F 6F 6B 23
0090 | 89 8E 31 97 AA 69 59 01 10 98 8D 8F 4A 66 58 DA
00A0 | 64 A3 CE 83 00 FE EF 76 38 88 D6 D6 CD 30 88 A9
00B0 | 41 91 FE C2 0A 29 60 70 9A 75 FE 75 83 B0 E5 AE
00C0 | CC 25 19 26 46 79 2C 30 89 9F 7B 05 AB 4A 0E AD
00D0 | C9 34 53 43 E4 6F 5E 10 71 98 06 A5 1D 36 A8 37
00E0 | 7D 89 02 06 9F CE C0 2B 95 21 41 73 4B 71 00 29
00F0 | 4B 1A 84 34 D6 06 0D 8E 10 D3 26 CA 9D AD B0 E8
0100 | 93 52 A2 6A BF CB D7 DC B4 48 18 2C 45 E7 81 08
0110 | 1B 05 26 B0 CB C6 6A FE 2E 66 24 2C 43 CC 54 12
0120 | E3 C0 F0 15 7B 9D 6F 0F EA DD D5 D8 22 92 20 07</code></pre>
<pre><code>0000 | 54 B6 43 66 B9 77 20 53 8F F9 BE 7C 1C 0F 2D 85
0010 | 09 9F E2 B2 B9 F1 49 F4 F7 59 81 C1 C6 97 0B 97
0020 | BE 0B 75 79 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | B8 45 C9 08 C2 DD 4A 0A 4D 8D BB 96 36 A3 29 56
0040 | ED 87 AC EB E6 7F 86 4A 5A C9 E1 0F 3D 38 F5 36
0050 | A5 F6 C9 BE 77 EF 95 A5 E3 06 D3 7C 77 0E CC 45
0060 | 51 E8 73 8E 1F 2C BB D4 23 01 39 F2 1B 14 34 84
0070 | C4 EA EF B1 B9 31 20 33 54 61 F3 4F E7 BC DF 38
0080 | D4 E4 81 E0 25 B2 D6 26 55 7B 7A EB BE 40 27 5A
0090 | 1C 05 75 3A FA DE F1 2F 78 51 D0 65 09 F6 28 2F
00A0 | 3F D1 EA 22 5B 5A A2 4A 95 3F FA C1 1A 26 96 7D
00B0 | D3 23 5C 35 94 65 F0 99 45 39 D1 9C D7 6E B5 55
00C0 | 4D 65 0A 6B 73 9C 04 E8 05 96 35 17 87 74 87 E5
00D0 | 80 FA 3A D1 BC 38 EF 84 A2 EA AA 5D 05 7C 89 B1
00E0 | 9F 6B 26 E3 94 52 BF 0D 2A B1 1D 68 FB 16 DA 6D
00F0 | 1D F9 F4 85 DC 97 7F 25 A9 FE 97 4B 25 C9 F8 75
0100 | FD 53 2E 24 93 07 E2 9F B8 A0 5A 23 9A 2B 31 DD
0110 | 8A E2 B1 C2 D0 E0 62 5D EA 4E 60 E0 06 FE 83 C3
0120 | C3 45 4B 46 3B 38 90 3A 8F 2F 13 A2 97 C7 08 0C</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 = BA0D89B59ED2F584EA8D6FA9FBBC0C3CB68753EE86E3AD1ACBCCD193E85F5980B3277A0
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>9ED2F584EA8D6FA9FBBC0C3CB68753EE</code></td>
<td><code>B97720538FF9BE7C1C0F2D85099FE2B2</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>86E3AD1ACBCCD193E85F5980B3277A00</code></td>
<td><code>B9F149F4F75981C1C6970B97BE0B7579</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>g_b</td>
<td>36, 260</td>
<td><code>FE00010005DC721E4B0B65C253CB9186</code> <code>2BAAE2058D48F664B2ABE26C98900B0F</code> <code>FDB1A459CF301AE12C324998C3D6F310</code> <code>69D2A8E6EB7ACF242E6749CBB954526D</code> <code>27BB59DEE0E889CEB673705AFAA01CDB</code> <code>05B52FC65AAC0E0C5E1D0187E46A792E</code> <code>0F6F6B23898E3197AA69590110988D8F</code> <code>4A6658DA64A3CE8300FEEF763888D6D6</code> <code>CD3088A94191FEC20A2960709A75FE75</code> <code>83B0E5AECC25192646792C30899F7B05</code> <code>AB4A0EADC9345343E46F5E10719806A5</code> <code>1D36A8377D8902069FCEC02B95214173</code> <code>4B7100294B1A8434D6060D8E10D326CA</code> <code>9DADB0E89352A26ABFCBD7DCB448182C</code> <code>45E781081B0526B0CBC66AFE2E66242C</code> <code>43CC5412E3C0F0157B9D6F0FEADDD5D8</code><br> <code>22922007</code></td>
<td><code>FE000100B845C908C2DD4A0A4D8DBB96</code> <code>36A32956ED87ACEBE67F864A5AC9E10F</code> <code>3D38F536A5F6C9BE77EF95A5E306D37C</code> <code>770ECC4551E8738E1F2CBBD4230139F2</code> <code>1B143484C4EAEFB1B93120335461F34F</code> <code>E7BCDF38D4E481E025B2D626557B7AEB</code> <code>BE40275A1C05753AFADEF12F7851D065</code> <code>09F6282F3FD1EA225B5AA24A953FFAC1</code> <code>1A26967DD3235C359465F0994539D19C</code> <code>D76EB5554D650A6B739C04E805963517</code> <code>877487E580FA3AD1BC38EF84A2EAAA5D</code> <code>057C89B19F6B26E39452BF0D2AB11D68</code> <code>FB16DA6D1DF9F485DC977F25A9FE974B</code> <code>25C9F875FD532E249307E29FB8A05A23</code> <code>9A2B31DD8AE2B1C2D0E0625DEA4E60E0</code> <code>06FE83C3C3454B463B38903A8F2F13A2</code><br> <code>97C7080C</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 = BA0D89B59ED2F584EA8D6FA9FBBC0C3CB68753EE86E3AD1ACBCCD193E85F5980B3277A0
<!-- 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 = 54B643669ED2F584EA8D6FA9FBBC0C3CB68753EE86E3AD1ACBCCD193E85F5980B3277A000000000000000000FE00010005DC721E4B0B65C253CB91862BAAE2058D48F664B2ABE26C98900B0FFDB1A459CF301AE12C324998C3D6F31069D2A8E6EB7ACF242E6749CBB954526D27BB59DEE0E889CEB673705AFAA01CDB05B52FC65AAC0E0C5E1D0187E46A792E0F6F6B23898E3197AA69590110988D8F4A6658DA64A3CE8300FEEF763888D6D6CD3088A94191FEC20A2960709A75FE7583B0E5AECC25192646792C30899F7B05AB4A0EADC9345343E46F5E10719806A51D36A8377D8902069FCEC02B952141734B7100294B1A8434D6060D8E10D326CA9DADB0E89352A26ABFCBD7DCB448182C45E781081B0526B0CBC66AFE2E66242C43CC5412E3C0F0157B9D6F0FEADDD5D822922007
padding = 461732066CB04B25F76D017E
tmp_aes_key = 99CCA58E7584C1EE1903081987F4183B912B1AE70BB654F456246DC0B30EF7BC
tmp_aes_iv = 116AD638FEE958A8C07EB2FF218C4F69AEB73C67B95A2D596BAC4C2CA3CBA13D</code></pre>
<pre><code>data = 54B64366B97720538FF9BE7C1C0F2D85099FE2B2B9F149F4F75981C1C6970B97BE0B75790000000000000000FE000100B845C908C2DD4A0A4D8DBB9636A32956ED87ACEBE67F864A5AC9E10F3D38F536A5F6C9BE77EF95A5E306D37C770ECC4551E8738E1F2CBBD4230139F21B143484C4EAEFB1B93120335461F34FE7BCDF38D4E481E025B2D626557B7AEBBE40275A1C05753AFADEF12F7851D06509F6282F3FD1EA225B5AA24A953FFAC11A26967DD3235C359465F0994539D19CD76EB5554D650A6B739C04E805963517877487E580FA3AD1BC38EF84A2EAAA5D057C89B19F6B26E39452BF0D2AB11D68FB16DA6D1DF9F485DC977F25A9FE974B25C9F875FD532E249307E29FB8A05A239A2B31DD8AE2B1C2D0E0625DEA4E60E006FE83C3C3454B463B38903A8F2F13A297C7080C
padding = 35BCD6E492AA8C344652AD3F
tmp_aes_key = AA8882764BC26DFE930BE3FB9AA4E2184C5765AA0AA9595FF95C3E95A2284393
tmp_aes_iv = F6EA80B37B880959A2DAD4F084F26E88853A15B5BBC5F1FAC00383C91CA407E6</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 = 65D4EFF0AF3B43A2336ADE8EBB600587DF201DFCE35C7F76BD0807A01995158AAAEB5E4AA477973D24851A9642B4E1BB4E3A732F3D87B5EC27EAA19B38DEB596047BADD8FF15AB2278B18255031011B1C58213123AE98EDA4A32DC17F2065290A72B9AEA1D95026E0367C051A1370BA38E1F2B66FED1D99DEE1FB7BCD5674C5C828E3738CE587B5C252FD11C9D5A2DBB216B82F620042141FB81AA61B73CF9F2EFEF898FB2E26BB3D4D61393AA55C125C0366D97DB4EE42F9526796A611FE89C9736337228AE221A171B59723A374181A2548BDCDEE5B24A33C0252F8D88D625EF996DB4E99DC2E41E263779B8CD8E593B75587CCE43C70148098D41345680DA1B5DE11835EDE90530E56DC7750E2DD7A7AB5197C42CF244E72A980F071B885B43975DC32EF129C85FB49130CA4CB923CC190731460434E7C6B7992C2D969794AC42A14381B6C1B955897945EFC4A6C9</code></pre>
<pre><code>encrypted_data = 14BBD880C1BCA4F77973155171EDE459AB79622D0D8C94650735263F5A4C0CA5D53B67FFB09582FEB8560D68883847758F87CFB8688644530B9E5E2714E8516733FAC4D9519ACF9A2ACCFE84E28D3570E0BF876D2F4B8FEE1E8CADA5971A51D8D4072272625F5D0B620BACEDF75206226D67806554A04388C6FDE44C082707F18FF649A9410BE0E3026ED9819982F445CD13AB8FB1AA1AFC83E843C9BB7D1ECB49FDB2536BD68EB7AC236105EFDF7FF22CADFBC4388F267129ED57F45781FBFE70CC128F64A8ABB468D25D9ADEA3A06DB11BE49606B8B43BCFCF871D5C5751F43F051605E39519371101967F6F772D4EDB9CA06A14FBB8807AFF5AAB0A36CD13299BFACF02B8503664511059C919B8D590F51749787415B1A26A28869B351FED9F59F7D6E0F45DD884962E3EF7817F9F59E96EED43DD38D82727E63894288CD20175371B0AE49F96C71326C84ED6A305</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 0C 8E 03 00 7A 78 5E 65
0010 | 78 01 00 00 1F 5F 04 F5 9E D2 F5 84 EA 8D 6F A9
0020 | FB BC 0C 3C B6 87 53 EE 86 E3 AD 1A CB CC D1 93
0030 | E8 5F 59 80 B3 27 7A 00 FE 50 01 00 65 D4 EF F0
0040 | AF 3B 43 A2 33 6A DE 8E BB 60 05 87 DF 20 1D FC
0050 | E3 5C 7F 76 BD 08 07 A0 19 95 15 8A AA EB 5E 4A
0060 | A4 77 97 3D 24 85 1A 96 42 B4 E1 BB 4E 3A 73 2F
0070 | 3D 87 B5 EC 27 EA A1 9B 38 DE B5 96 04 7B AD D8
0080 | FF 15 AB 22 78 B1 82 55 03 10 11 B1 C5 82 13 12
0090 | 3A E9 8E DA 4A 32 DC 17 F2 06 52 90 A7 2B 9A EA
00A0 | 1D 95 02 6E 03 67 C0 51 A1 37 0B A3 8E 1F 2B 66
00B0 | FE D1 D9 9D EE 1F B7 BC D5 67 4C 5C 82 8E 37 38
00C0 | CE 58 7B 5C 25 2F D1 1C 9D 5A 2D BB 21 6B 82 F6
00D0 | 20 04 21 41 FB 81 AA 61 B7 3C F9 F2 EF EF 89 8F
00E0 | B2 E2 6B B3 D4 D6 13 93 AA 55 C1 25 C0 36 6D 97
00F0 | DB 4E E4 2F 95 26 79 6A 61 1F E8 9C 97 36 33 72
0100 | 28 AE 22 1A 17 1B 59 72 3A 37 41 81 A2 54 8B DC
0110 | DE E5 B2 4A 33 C0 25 2F 8D 88 D6 25 EF 99 6D B4
0120 | E9 9D C2 E4 1E 26 37 79 B8 CD 8E 59 3B 75 58 7C
0130 | CE 43 C7 01 48 09 8D 41 34 56 80 DA 1B 5D E1 18
0140 | 35 ED E9 05 30 E5 6D C7 75 0E 2D D7 A7 AB 51 97
0150 | C4 2C F2 44 E7 2A 98 0F 07 1B 88 5B 43 97 5D C3
0160 | 2E F1 29 C8 5F B4 91 30 CA 4C B9 23 CC 19 07 31
0170 | 46 04 34 E7 C6 B7 99 2C 2D 96 97 94 AC 42 A1 43
0180 | 81 B6 C1 B9 55 89 79 45 EF C4 A6 C9</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 50 74 01 00 2C 80 5E 65
0010 | 78 01 00 00 1F 5F 04 F5 B9 77 20 53 8F F9 BE 7C
0020 | 1C 0F 2D 85 09 9F E2 B2 B9 F1 49 F4 F7 59 81 C1
0030 | C6 97 0B 97 BE 0B 75 79 FE 50 01 00 14 BB D8 80
0040 | C1 BC A4 F7 79 73 15 51 71 ED E4 59 AB 79 62 2D
0050 | 0D 8C 94 65 07 35 26 3F 5A 4C 0C A5 D5 3B 67 FF
0060 | B0 95 82 FE B8 56 0D 68 88 38 47 75 8F 87 CF B8
0070 | 68 86 44 53 0B 9E 5E 27 14 E8 51 67 33 FA C4 D9
0080 | 51 9A CF 9A 2A CC FE 84 E2 8D 35 70 E0 BF 87 6D
0090 | 2F 4B 8F EE 1E 8C AD A5 97 1A 51 D8 D4 07 22 72
00A0 | 62 5F 5D 0B 62 0B AC ED F7 52 06 22 6D 67 80 65
00B0 | 54 A0 43 88 C6 FD E4 4C 08 27 07 F1 8F F6 49 A9
00C0 | 41 0B E0 E3 02 6E D9 81 99 82 F4 45 CD 13 AB 8F
00D0 | B1 AA 1A FC 83 E8 43 C9 BB 7D 1E CB 49 FD B2 53
00E0 | 6B D6 8E B7 AC 23 61 05 EF DF 7F F2 2C AD FB C4
00F0 | 38 8F 26 71 29 ED 57 F4 57 81 FB FE 70 CC 12 8F
0100 | 64 A8 AB B4 68 D2 5D 9A DE A3 A0 6D B1 1B E4 96
0110 | 06 B8 B4 3B CF CF 87 1D 5C 57 51 F4 3F 05 16 05
0120 | E3 95 19 37 11 01 96 7F 6F 77 2D 4E DB 9C A0 6A
0130 | 14 FB B8 80 7A FF 5A AB 0A 36 CD 13 29 9B FA CF
0140 | 02 B8 50 36 64 51 10 59 C9 19 B8 D5 90 F5 17 49
0150 | 78 74 15 B1 A2 6A 28 86 9B 35 1F ED 9F 59 F7 D6
0160 | E0 F4 5D D8 84 96 2E 3E F7 81 7F 9F 59 E9 6E ED
0170 | 43 DD 38 D8 27 27 E6 38 94 28 8C D2 01 75 37 1B
0180 | 0A E4 9F 96 C7 13 26 C8 4E D6 A3 05</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>0C8E03007A785E65</code></td>
<td><code>507401002C805E65</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>9ED2F584EA8D6FA9FBBC0C3CB68753EE</code></td>
<td><code>B97720538FF9BE7C1C0F2D85099FE2B2</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>86E3AD1ACBCCD193E85F5980B3277A00</code></td>
<td><code>B9F149F4F75981C1C6970B97BE0B7579</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_data</td>
<td>56, 340</td>
<td><code>FE50010065D4EFF0AF3B43A2336ADE8E</code> <code>BB600587DF201DFCE35C7F76BD0807A0</code> <code>1995158AAAEB5E4AA477973D24851A96</code> <code>42B4E1BB4E3A732F3D87B5EC27EAA19B</code> <code>38DEB596047BADD8FF15AB2278B18255</code> <code>031011B1C58213123AE98EDA4A32DC17</code> <code>F2065290A72B9AEA1D95026E0367C051</code> <code>A1370BA38E1F2B66FED1D99DEE1FB7BC</code> <code>D5674C5C828E3738CE587B5C252FD11C</code> <code>9D5A2DBB216B82F620042141FB81AA61</code> <code>B73CF9F2EFEF898FB2E26BB3D4D61393</code> <code>AA55C125C0366D97DB4EE42F9526796A</code> <code>611FE89C9736337228AE221A171B5972</code> <code>3A374181A2548BDCDEE5B24A33C0252F</code> <code>8D88D625EF996DB4E99DC2E41E263779</code> <code>B8CD8E593B75587CCE43C70148098D41</code> <code>345680DA1B5DE11835EDE90530E56DC7</code> <code>750E2DD7A7AB5197C42CF244E72A980F</code> <code>071B885B43975DC32EF129C85FB49130</code> <code>CA4CB923CC190731460434E7C6B7992C</code> <code>2D969794AC42A14381B6C1B955897945</code><br> <code>EFC4A6C9</code></td>
<td><code>FE50010014BBD880C1BCA4F779731551</code> <code>71EDE459AB79622D0D8C94650735263F</code> <code>5A4C0CA5D53B67FFB09582FEB8560D68</code> <code>883847758F87CFB8688644530B9E5E27</code> <code>14E8516733FAC4D9519ACF9A2ACCFE84</code> <code>E28D3570E0BF876D2F4B8FEE1E8CADA5</code> <code>971A51D8D4072272625F5D0B620BACED</code> <code>F75206226D67806554A04388C6FDE44C</code> <code>082707F18FF649A9410BE0E3026ED981</code> <code>9982F445CD13AB8FB1AA1AFC83E843C9</code> <code>BB7D1ECB49FDB2536BD68EB7AC236105</code> <code>EFDF7FF22CADFBC4388F267129ED57F4</code> <code>5781FBFE70CC128F64A8ABB468D25D9A</code> <code>DEA3A06DB11BE49606B8B43BCFCF871D</code> <code>5C5751F43F051605E39519371101967F</code> <code>6F772D4EDB9CA06A14FBB8807AFF5AAB</code> <code>0A36CD13299BFACF02B8503664511059</code> <code>C919B8D590F51749787415B1A26A2886</code> <code>9B351FED9F59F7D6E0F45DD884962E3E</code> <code>F7817F9F59E96EED43DD38D82727E638</code> <code>94288CD20175371B0AE49F96C71326C8</code><br> <code>4ED6A305</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 = 93C34DA0D84A1EF6FCD2ECD5F8FBA80C2BBCD67DFF004B4AE900F9C139362A54F3E0489FEF95369A44CCE0206F3DE4B8B17EB87E70E9BD47A07359D6D013A2A44D45C12CD3A2058322E689F6495531043D1AEBFF8C071E3C4E8DE8AD0EDDD69D215E988372865734634E20AF01225BD0ECD3C402D8564382C26C6D7631ABCCBC5E5AFB1E9B4E37A4A85788327D7CC1CBE14E158A060A1AB7F5F97285278211E423F52FAAC3F97F002668919C957784A5F99612FA940E3DFD53759F65BA265B90ECFEF32AE33660417E827E04D598C717846FE907545E3F5136E3BD9D319A59AB9595772B73C79D02F27AA7C7CC49B70892226CCA7A5389BB05E7AB04FDABC926</code></pre>
<pre><code>auth_key = 683DD344B42333A5133E63D191F6D221FEFF3F9D42FB37D04AAEFB110C0154E48961C5E8B29AA81395A3C1EB22F0B4A4E3645AEC999BEF182B0AB22E306B9943D7B224E62C5B312E3EFA944B1FE9447B09D514D1E5728C9AA720446A39ECE1916A5938C14A92332616168FC5F7AEBBD3F1708BA740F481F246FBA323EFF851D4319A9CDF176E516FB122184C821212B723F6FF6ECC6BD0CF46305110E11657FEF8CE0B98A2D9031C9AF734FA08F06D2B7CB0792F819BB4F6B176C10C9663527647D6291313CAF2F74F8C6B4E468DF0FD52A7A625B412E43021AECC44B8493384EFA18137D438CA65FD3CDE8861E5F8EF49398A2F9DF0270E5AEA0A053AF9C88A</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 E4 9B DA 7A 78 5E 65
0010 | 60 00 00 00 34 F7 CB 3B 9E D2 F5 84 EA 8D 6F A9
0020 | FB BC 0C 3C B6 87 53 EE 86 E3 AD 1A CB CC D1 93
0030 | E8 5F 59 80 B3 27 7A 00 8A 54 7D C0 35 E2 7F 30
0040 | EF 1F BA 06 6B 3D 79 0A</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 E0 C6 78 2C 80 5E 65
0010 | 80 00 00 00 34 F7 CB 3B B9 77 20 53 8F F9 BE 7C
0020 | 1C 0F 2D 85 09 9F E2 B2 B9 F1 49 F4 F7 59 81 C1
0030 | C6 97 0B 97 BE 0B 75 79 32 E5 26 89 0C 8A 31 E2
0040 | 38 DA BA FF BE 43 C9 29</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>01E49BDA7A785E65</code></td>
<td><code>01E0C6782C805E65</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>60000000</code> (96 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>9ED2F584EA8D6FA9FBBC0C3CB68753EE</code></td>
<td><code>B97720538FF9BE7C1C0F2D85099FE2B2</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>86E3AD1ACBCCD193E85F5980B3277A00</code></td>
<td><code>B9F149F4F75981C1C6970B97BE0B7579</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce_hash1</td>
<td>56, 16</td>
<td><code>8A547DC035E27F30EF1FBA066B3D790A</code></td>
<td><code>32E526890C8A31E238DABAFFBE43C929</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>

View file

@ -809,7 +809,7 @@
</tr>
<tr>
<td><a href="/method/account.invalidateSignInCodes">account.invalidateSignInCodes</a></td>
<td> </td>
<td>Invalidate the specified login codes, see <a href="/api/auth#invalidating-login-codes">here »</a> for more info.</td>
</tr>
<tr>
<td><a href="/method/channels.clickSponsoredMessage">channels.clickSponsoredMessage</a></td>