Update content of files

This commit is contained in:
GitHub Action 2024-07-16 17:58:52 +00:00
parent 692cdd90a2
commit 38313e840a
7 changed files with 259 additions and 218 deletions

View file

@ -247,6 +247,9 @@ This allows the server to filter messages based on a text query, and even on the
<p>Telegram apps support generating, sharing and synchronizing app themes.</p>
<h3><a class="anchor" href="#sponsored-messages" id="sponsored-messages" name="sponsored-messages"><i class="anchor-icon"></i></a><a href="/api/sponsored-messages">Sponsored messages</a></h3>
<p>If your app allows accessing content from Telegram <a href="https://telegram.org/tour/channels">channels</a>, you must include support for <a href="https://core.telegram.org/api/sponsored-messages">official sponsored messages</a> in Telegram channels. </p>
<h3><a class="anchor" href="#channel-ad-revenue" id="channel-ad-revenue" name="channel-ad-revenue"><i class="anchor-icon"></i></a><a href="/api/revenue">Channel ad revenue</a></h3>
<p>Telegram has one of the <strong>most generous reward systems</strong> in the history of social media. Telegram channel owners can now receive <strong>50%</strong> of the revenue from ads displayed in their channels.</p>
<p>This page describes the methods used to withdraw channel ad revenue, as well as view detailed revenue stats. </p>
<h3><a class="anchor" href="#contacts" id="contacts" name="contacts"><i class="anchor-icon"></i></a><a href="/api/contacts">Contacts</a></h3>
<p>Working with contacts in the API.</p>
<h3><a class="anchor" href="#blocklist" id="blocklist" name="blocklist"><i class="anchor-icon"></i></a><a href="/api/block">Blocklist</a></h3>

View file

@ -247,6 +247,9 @@ This allows the server to filter messages based on a text query, and even on the
<p>Telegram apps support generating, sharing and synchronizing app themes.</p>
<h3><a class="anchor" href="#sponsored-messages" id="sponsored-messages" name="sponsored-messages"><i class="anchor-icon"></i></a><a href="/api/sponsored-messages">Sponsored messages</a></h3>
<p>If your app allows accessing content from Telegram <a href="https://telegram.org/tour/channels">channels</a>, you must include support for <a href="https://core.telegram.org/api/sponsored-messages">official sponsored messages</a> in Telegram channels. </p>
<h3><a class="anchor" href="#channel-ad-revenue" id="channel-ad-revenue" name="channel-ad-revenue"><i class="anchor-icon"></i></a><a href="/api/revenue">Channel ad revenue</a></h3>
<p>Telegram has one of the <strong>most generous reward systems</strong> in the history of social media. Telegram channel owners can now receive <strong>50%</strong> of the revenue from ads displayed in their channels.</p>
<p>This page describes the methods used to withdraw channel ad revenue, as well as view detailed revenue stats. </p>
<h3><a class="anchor" href="#contacts" id="contacts" name="contacts"><i class="anchor-icon"></i></a><a href="/api/contacts">Contacts</a></h3>
<p>Working with contacts in the API.</p>
<h3><a class="anchor" href="#blocklist" id="blocklist" name="blocklist"><i class="anchor-icon"></i></a><a href="/api/block">Blocklist</a></h3>

View file

@ -243,6 +243,22 @@ Use <a href="/method/auth.checkRecoveryPassword">auth.checkRecoveryPassword</a>
Then use <a href="/method/auth.recoverPassword">auth.recoverPassword</a> with the received code to delete the current 2FA password, to set a new one follow <a href="/api/srp">these instructions »</a>.</p>
<h4><a class="anchor" href="#account-deletion" id="account-deletion" name="account-deletion"><i class="anchor-icon"></i></a>Account deletion</h4>
<p>If the user has successfully provided the login code, but they forgot their <a href="/api/srp">2FA</a> password and they don't have access to any other logged-in session, the account can be deleted following <a href="/api/account-deletion">these instructions »</a>. </p>
<h3><a class="anchor" href="#using-the-2fa-password" id="using-the-2fa-password" name="using-the-2fa-password"><i class="anchor-icon"></i></a>Using the 2FA password</h3>
<p>Multiple methods in the API such as those used to make <a href="/api/payments">payments</a>, <a href="/method/channels.editCreator">transfer channel ownership</a> and others require the user to authenticate using the 2FA password passed as an <a href="/type/InputCheckPasswordSRP">InputCheckPasswordSRP</a> constructor, generated as specified <a href="#checking-the-password-with-srp">above</a>. </p>
<p>All such methods where a password verification is required <em>after login</em> may emit the following RPC errors: </p>
<ul>
<li><code>PASSWORD_MISSING</code> - No 2FA password is configured, but one is <strong>required</strong> in order to invoke the method. <a href="#setting-a-new-2fa-password">Set a 2FA password</a> and then repeat the method call.</li>
<li><code>PASSWORD_TOO_FRESH_%d</code> - The 2FA password was modified less than 24 hours ago, try again in <code>%d</code> seconds.</li>
<li><code>SESSION_TOO_FRESH_%d</code> - This session was created less than 24 hours ago, try again in <code>%d</code> seconds.</li>
<li><code>PASSWORD_HASH_INVALID</code> - The specified password is invalid (or an <a href="/constructor/inputCheckPasswordEmpty">inputCheckPasswordEmpty</a> was provided, but a 2FA password is required). </li>
</ul>
<p>The usual flow for invoking such methods is to first invoke the method passing an <a href="/constructor/inputCheckPasswordEmpty">inputCheckPasswordEmpty</a> (as if no password is configured, even if one is actually configured); then, according to the returned RPC error, proceed to:</p>
<ul>
<li><code>PASSWORD_HASH_INVALID</code> - The 2FA password insertion flow, the re-invoke the method with the user-provided password</li>
<li><code>PASSWORD_MISSING</code> - The 2FA password setup flow, then re-invoke the method with the newly provided password</li>
<li>All other RPC errors - Show an error message with a description of the error</li>
</ul>
<p>This flow is useful to avoid race conditions with other currently logged-in sessions that may change the password. </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="#srp-design" id="srp-design" name="srp-design"><i class="anchor-icon"></i></a><a href="http://srp.stanford.edu/design.html">SRP design</a></h4></div>

View file

@ -48,13 +48,8 @@
<p>This page describes the methods used to buy and withdraw Telegram Stars, as well as view detailed revenue stats. </p>
<h3><a class="anchor" href="#buying-telegram-stars" id="buying-telegram-stars" name="buying-telegram-stars"><i class="anchor-icon"></i></a>Buying Telegram Stars</h3>
<h3><a class="anchor" href="#using-telegram-stars" id="using-telegram-stars" name="using-telegram-stars"><i class="anchor-icon"></i></a>Using Telegram Stars</h3>
<h3><a class="anchor" href="#withdrawing-telegram-stars" id="withdrawing-telegram-stars" name="withdrawing-telegram-stars"><i class="anchor-icon"></i></a>Withdrawing Telegram Stars</h3>
<pre><code><a href='/constructor/stats.broadcastRevenueWithdrawalUrl'>stats.broadcastRevenueWithdrawalUrl</a>#ec659737 url:<a href='/type/string'>string</a> = <a href='/type/stats.BroadcastRevenueWithdrawalUrl'>stats.BroadcastRevenueWithdrawalUrl</a>;
---functions---
<a href='/method/stats.getBroadcastRevenueWithdrawalUrl'>stats.getBroadcastRevenueWithdrawalUrl</a>#2a65ef73 channel:<a href='/type/InputChannel'>InputChannel</a> password:<a href='/type/InputCheckPasswordSRP'>InputCheckPasswordSRP</a> = <a href='/type/stats.BroadcastRevenueWithdrawalUrl'>stats.BroadcastRevenueWithdrawalUrl</a>;</code></pre>
<h3><a class="anchor" href="#telegram-stars-revenue-statistics" id="telegram-stars-revenue-statistics" name="telegram-stars-revenue-statistics"><i class="anchor-icon"></i></a>Telegram Stars revenue statistics</h3>
<h3><a class="anchor" href="#revenue-statistics" id="revenue-statistics" name="revenue-statistics"><i class="anchor-icon"></i></a>Revenue statistics</h3>
<h4><a class="anchor" href="#channel-ad-revenue-statistics" id="channel-ad-revenue-statistics" name="channel-ad-revenue-statistics"><i class="anchor-icon"></i></a>Channel ad revenue statistics</h4>
<pre><code><a href='/constructor/channelFull'>channelFull</a>#bbab348d flags:<a href='/type/%23'>#</a> can_view_participants:flags.3?<a href='/constructor/true'>true</a> can_set_username:flags.6?<a href='/constructor/true'>true</a> can_set_stickers:flags.7?<a href='/constructor/true'>true</a> hidden_prehistory:flags.10?<a href='/constructor/true'>true</a> can_set_location:flags.16?<a href='/constructor/true'>true</a> has_scheduled:flags.19?<a href='/constructor/true'>true</a> can_view_stats:flags.20?<a href='/constructor/true'>true</a> blocked:flags.22?<a href='/constructor/true'>true</a> flags2:<a href='/type/%23'>#</a> can_delete_channel:flags2.0?<a href='/constructor/true'>true</a> antispam:flags2.1?<a href='/constructor/true'>true</a> participants_hidden:flags2.2?<a href='/constructor/true'>true</a> translations_disabled:flags2.3?<a href='/constructor/true'>true</a> stories_pinned_available:flags2.5?<a href='/constructor/true'>true</a> view_forum_as_messages:flags2.6?<a href='/constructor/true'>true</a> restricted_sponsored:flags2.11?<a href='/constructor/true'>true</a> can_view_revenue:flags2.12?<a href='/constructor/true'>true</a> id:<a href='/type/long'>long</a> about:<a href='/type/string'>string</a> participants_count:flags.0?<a href='/type/int'>int</a> admins_count:flags.1?<a href='/type/int'>int</a> kicked_count:flags.2?<a href='/type/int'>int</a> banned_count:flags.2?<a href='/type/int'>int</a> online_count:flags.13?<a href='/type/int'>int</a> read_inbox_max_id:<a href='/type/int'>int</a> read_outbox_max_id:<a href='/type/int'>int</a> unread_count:<a href='/type/int'>int</a> chat_photo:<a href='/type/Photo'>Photo</a> notify_settings:<a href='/type/PeerNotifySettings'>PeerNotifySettings</a> exported_invite:flags.23?<a href='/type/ExportedChatInvite'>ExportedChatInvite</a> bot_info:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/BotInfo'>BotInfo</a>&gt; migrated_from_chat_id:flags.4?<a href='/type/long'>long</a> migrated_from_max_id:flags.4?<a href='/type/int'>int</a> pinned_msg_id:flags.5?<a href='/type/int'>int</a> stickerset:flags.8?<a href='/type/StickerSet'>StickerSet</a> available_min_id:flags.9?<a href='/type/int'>int</a> folder_id:flags.11?<a href='/type/int'>int</a> linked_chat_id:flags.14?<a href='/type/long'>long</a> location:flags.15?<a href='/type/ChannelLocation'>ChannelLocation</a> slowmode_seconds:flags.17?<a href='/type/int'>int</a> slowmode_next_send_date:flags.18?<a href='/type/int'>int</a> stats_dc:flags.12?<a href='/type/int'>int</a> pts:<a href='/type/int'>int</a> call:flags.21?<a href='/type/InputGroupCall'>InputGroupCall</a> ttl_period:flags.24?<a href='/type/int'>int</a> pending_suggestions:flags.25?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/string'>string</a>&gt; groupcall_default_join_as:flags.26?<a href='/type/Peer'>Peer</a> theme_emoticon:flags.27?<a href='/type/string'>string</a> requests_pending:flags.28?<a href='/type/int'>int</a> recent_requesters:flags.28?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/long'>long</a>&gt; default_send_as:flags.29?<a href='/type/Peer'>Peer</a> available_reactions:flags.30?<a href='/type/ChatReactions'>ChatReactions</a> reactions_limit:flags2.13?<a href='/type/int'>int</a> stories:flags2.4?<a href='/type/PeerStories'>PeerStories</a> wallpaper:flags2.7?<a href='/type/WallPaper'>WallPaper</a> boosts_applied:flags2.8?<a href='/type/int'>int</a> boosts_unrestrict:flags2.9?<a href='/type/int'>int</a> emojiset:flags2.10?<a href='/type/StickerSet'>StickerSet</a> = <a href='/type/ChatFull'>ChatFull</a>;
<a href='/constructor/broadcastRevenueBalances'>broadcastRevenueBalances</a>#8438f1c6 current_balance:<a href='/type/long'>long</a> available_balance:<a href='/type/long'>long</a> overall_revenue:<a href='/type/long'>long</a> = <a href='/type/BroadcastRevenueBalances'>BroadcastRevenueBalances</a>;
@ -73,7 +68,25 @@
<a href='/method/stats.getBroadcastRevenueStats'>stats.getBroadcastRevenueStats</a>#75dfb671 flags:<a href='/type/%23'>#</a> dark:flags.0?<a href='/constructor/true'>true</a> channel:<a href='/type/InputChannel'>InputChannel</a> = <a href='/type/stats.BroadcastRevenueStats'>stats.BroadcastRevenueStats</a>;
<a href='/method/stats.getBroadcastRevenueTransactions'>stats.getBroadcastRevenueTransactions</a>#69280f channel:<a href='/type/InputChannel'>InputChannel</a> offset:<a href='/type/int'>int</a> limit:<a href='/type/int'>int</a> = <a href='/type/stats.BroadcastRevenueTransactions'>stats.BroadcastRevenueTransactions</a>;</code></pre></div>
<a href='/method/stats.getBroadcastRevenueTransactions'>stats.getBroadcastRevenueTransactions</a>#69280f channel:<a href='/type/InputChannel'>InputChannel</a> offset:<a href='/type/int'>int</a> limit:<a href='/type/int'>int</a> = <a href='/type/stats.BroadcastRevenueTransactions'>stats.BroadcastRevenueTransactions</a>;</code></pre>
<p>Channel ad revenue statistics may be fetched by channel admins if the <a href="/constructor/channelFull">channelFull</a>.<code>can_view_revenue</code> flag is set. </p>
<p>Use <a href="/method/stats.getBroadcastRevenueStats">stats.getBroadcastRevenueStats</a> to fetch statistics about the revenue earned from sponsored messages in a channel; the returned <a href="/type/StatsGraph">StatsGraph</a> graphs can be rendered <a href="/api/stats#graph-visualization">as described here »</a>. </p>
<p>Specifically, the <code>top_hours_graph</code> will graph the </p>
<p>The transaction history may be fetched using <a href="/method/stats.getBroadcastRevenueTransactions">stats.getBroadcastRevenueTransactions</a>, which will return a vector of <a href="/type/BroadcastRevenueTransaction">BroadcastRevenueTransaction</a> constructors, one of:</p>
<ul>
<li><a href="/constructor/broadcastRevenueTransactionProceeds">broadcastRevenueTransactionProceeds</a> - Describes earnings from sponsored messages in a chat in some time frame</li>
<li><a href="/constructor/broadcastRevenueTransactionWithdrawal">broadcastRevenueTransactionWithdrawal</a> - Describes a <a href="#withdrawing-telegram-stars">withdrawal</a> of ad earnings</li>
<li><a href="/constructor/broadcastRevenueTransactionRefund">broadcastRevenueTransactionRefund</a> - Describes a refund for failed withdrawal of ad earnings</li>
</ul>
<h3><a class="anchor" href="#withdrawing-telegram-stars" id="withdrawing-telegram-stars" name="withdrawing-telegram-stars"><i class="anchor-icon"></i></a>Withdrawing Telegram Stars</h3>
<h4><a class="anchor" href="#channel-ad-revenue" id="channel-ad-revenue" name="channel-ad-revenue"><i class="anchor-icon"></i></a>Channel ad revenue</h4>
<pre><code><a href='/constructor/stats.broadcastRevenueWithdrawalUrl'>stats.broadcastRevenueWithdrawalUrl</a>#ec659737 url:<a href='/type/string'>string</a> = <a href='/type/stats.BroadcastRevenueWithdrawalUrl'>stats.BroadcastRevenueWithdrawalUrl</a>;
---functions---
<a href='/method/stats.getBroadcastRevenueWithdrawalUrl'>stats.getBroadcastRevenueWithdrawalUrl</a>#2a65ef73 channel:<a href='/type/InputChannel'>InputChannel</a> password:<a href='/type/InputCheckPasswordSRP'>InputCheckPasswordSRP</a> = <a href='/type/stats.BroadcastRevenueWithdrawalUrl'>stats.BroadcastRevenueWithdrawalUrl</a>;</code></pre>
<p>To withdraw Telegram Stars from a channel's ad revenue balance, invoke <a href="/method/stats.getBroadcastRevenueWithdrawalUrl">stats.getBroadcastRevenueWithdrawalUrl</a>, passing the current account's <a href="/api/srp">2FA password</a> as an <a href="/type/InputCheckPasswordSRP">InputCheckPasswordSRP</a> constructor, generated <a href="/api/srp">as specified here »</a>. </p>
<p>The method will return a unique URL to a <a href="https://fragment.com/ads">Fragment</a> page where the user will be able to specify and submit the address of the TON wallet where the funds will be sent.</p></div>
</div>

View file

@ -87,7 +87,7 @@
<tr>
<td><strong>for_personal</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.2?<a href="/constructor/true">true</a></td>
<td> </td>
<td>Set this flag to only fetch the full list of channels that may be passed to <a href="/method/account.updatePersonalChannel">account.updatePersonalChannel</a> to <a href="/api/profile#personal-channel">display them on our profile page</a>.</td>
</tr>
</tbody>
</table>
@ -122,6 +122,11 @@
<p>Check if a username is free and can be assigned to a channel/supergroup</p>
<h4><a class="anchor" href="#channelsupdateusername" id="channelsupdateusername" name="channelsupdateusername"><i class="anchor-icon"></i></a><a href="/method/channels.updateUsername">channels.updateUsername</a></h4>
<p>Change or remove the username of a supergroup/channel</p>
<h4><a class="anchor" href="#accountupdatepersonalchannel" id="accountupdatepersonalchannel" name="accountupdatepersonalchannel"><i class="anchor-icon"></i></a><a href="/method/account.updatePersonalChannel">account.updatePersonalChannel</a></h4>
<p>Associate (or remove) a personal <a href="/api/channel">channel »</a>, that will be listed on our personal <a href="/api/profile#personal-channel">profile page »</a>.</p>
<p>Changing it will emit an <a href="/constructor/updateUser">updateUser</a> update.</p>
<h4><a class="anchor" href="#profile" id="profile" name="profile"><i class="anchor-icon"></i></a><a href="/api/profile">Profile</a></h4>
<p>Telegram offers many customization options for your profile!</p>
<h4><a class="anchor" href="#config" id="config" name="config"><i class="anchor-icon"></i></a><a href="/constructor/config">config</a></h4>
<p>Current configuration</p></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 9C 78 0D 00 ED 0C 94 66
0010 | 14 00 00 00 F1 8E 7E BE 97 54 B5 97 0F EC 0D 63
0020 | 16 2C 80 52 33 C8 E5 18</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 1C 5F 09 00 58 AD 96 66
0010 | 14 00 00 00 F1 8E 7E BE 17 50 E8 58 D3 21 1A F9
0020 | 97 FF 63 38 14 87 00 9E</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>9C780D00ED0C9466</code></td>
<td><code>1C5F090058AD9666</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>9754B5970FEC0D63162C805233C8E518</code></td>
<td><code>1750E858D3211AF997FF63381487009E</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 92 D9 ED 0C 94 66
0010 | 80 00 00 00 63 24 16 05 97 54 B5 97 0F EC 0D 63
0020 | 16 2C 80 52 33 C8 E5 18 8A C0 CE 2C D5 BD D5 93
0030 | 86 26 E2 71 F7 E5 65 0E 08 13 14 F7 66 64 11 E5
0040 | 69 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 AC E6 8C 58 AD 96 66
0010 | 60 00 00 00 63 24 16 05 17 50 E8 58 D3 21 1A F9
0020 | 97 FF 63 38 14 87 00 9E 0B ED 9E E8 16 1D 54 6C
0030 | 7E 8F 19 68 58 00 BF 8C 08 1D 32 D5 73 DF DB 79
0040 | 7B 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>01D092D9ED0C9466</code></td>
<td><code>01ACE68C58AD9666</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>80000000</code> (128 in decimal)</td>
<td><code>60000000</code> (96 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -150,19 +150,19 @@
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>9754B5970FEC0D63162C805233C8E518</code></td>
<td><code>1750E858D3211AF997FF63381487009E</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>8AC0CE2CD5BDD5938626E271F7E5650E</code></td>
<td><code>0BED9EE8161D546C7E8F19685800BF8C</code></td>
<td>Server-generated random number</td>
</tr>
<tr>
<td>pq</td>
<td>56, 12</td>
<td><code>081314F7666411E569000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1374995805392463209</td>
<td><code>081D32D573DFDB797B000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2103978669589100923</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 = 1374995805392463209</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>1374995805392463209 = 1171537639 * 1173667631</code></p>
<pre><code>p = 1171537639
q = 1173667631</code></pre>
<pre><code>pq = 2103978669589100923</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>2103978669589100923 = 1128259037 * 1864801079</code></p>
<pre><code>p = 1128259037
q = 1864801079</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 13 14 F7 66 64 11 E5 69 00 00 00
0010 | 04 45 D4 3E E7 00 00 00 04 45 F4 BF 2F 00 00 00
0020 | 97 54 B5 97 0F EC 0D 63 16 2C 80 52 33 C8 E5 18
0030 | 8A C0 CE 2C D5 BD D5 93 86 26 E2 71 F7 E5 65 0E
0040 | 20 DF 2E C3 22 9D 8D 8D 49 13 98 26 C2 28 48 89
0050 | 13 7C E6 05 6B 73 1E D8 F1 9C F4 31 7A 02 F5 C1
<pre><code>0000 | 95 5F F5 A9 08 1D 32 D5 73 DF DB 79 7B 00 00 00
0010 | 04 43 3F DD DD 00 00 00 04 6F 26 9B 37 00 00 00
0020 | 17 50 E8 58 D3 21 1A F9 97 FF 63 38 14 87 00 9E
0030 | 0B ED 9E E8 16 1D 54 6C 7E 8F 19 68 58 00 BF 8C
0040 | 8A 2F 9F 65 0B 8F 58 EA 62 9A 6B 61 2C 93 B8 A8
0050 | B9 6A 6D 63 87 4D 6F 07 AC 86 AA F3 F9 C3 0F CF
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 = 1173667631</code></pre>
<tr>
<td>pq</td>
<td>4, 12</td>
<td><code>081314F7666411E569000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1374995805392463209</td>
<td><code>081D32D573DFDB797B000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2103978669589100923</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>0445D43EE7000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1171537639</td>
<td><code>04433FDDDD000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1128259037</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>0445F4BF2F000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1173667631</td>
<td><code>046F269B37000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1864801079</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>9754B5970FEC0D63162C805233C8E518</code></td>
<td><code>1750E858D3211AF997FF63381487009E</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>48, 16</td>
<td><code>8AC0CE2CD5BDD5938626E271F7E5650E</code></td>
<td><code>0BED9EE8161D546C7E8F19685800BF8C</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce</td>
<td>64, 32</td>
<td><code>20DF2EC3229D8D8D49139826C2284889</code> <code>137CE6056B731ED8F19CF4317A02F5C1</code></td>
<td><code>8A2F9F650B8F58EA629A6B612C93B8A8</code> <code>B96A6D63874D6F07AC86AAF3F9C30FCF</code></td>
<td>Client-generated random number</td>
</tr>
<tr>
@ -291,39 +291,39 @@ q = 1173667631</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 = 955FF5A9081314F7666411E5690000000445D43EE70000000445F4BF2F0000009754B5970FEC0D63162C805233C8E5188AC0CE2CD5BDD5938626E271F7E5650E20DF2EC3229D8D8D49139826C2284889137CE6056B731ED8F19CF4317A02F5C102000000
random_padding_bytes = 9F5DE315552DEDDFB4BB2AA7D4FBBF6558CB75342792DD51EC17B9CD3B3E7CDBD8F85EDCF96CA01B6763ADF76B5003649C512B09AA609DB0AB44AE3DCCE2468BDA517FD1BD9DD975B514782C42EBF96803A89F19D06854A7B65F21E1</code></pre>
<pre><code>data = 955FF5A9081D32D573DFDB797B00000004433FDDDD000000046F269B370000001750E858D3211AF997FF63381487009E0BED9EE8161D546C7E8F19685800BF8C8A2F9F650B8F58EA629A6B612C93B8A8B96A6D63874D6F07AC86AAF3F9C30FCF02000000
random_padding_bytes = E446A256CDF42280D5C8C445C79C419BABD8C8091422043764E075A1F015AF05004B5C5B11A40DC211E6B16253875913CF5D1AC232A16E1380D99EB5ADA25367D392A7DD29257B9F9EE027192B037A7520719F54737A912F217E5868</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 = B9CEB5287698BDE5FC2C853ED3E5316AD7DB814D430AB517B268CA9173195061AA8CB5E70DC7DEFABD2676ECBCFB48B6D5381EB43CD5B1353974ABBDB9721C4E2ADEE49A7C045B9B87A74FF941AC57730C9CE5932FA9BCC9870BEEEB2BD91CD312829CD45ABD85E17EF5FDC449260DD22FC6DA898C4DDEC071A1FF5C67509644C91F8FD7B0D6B06736690D1F9AEB2E023752AE61BD7D4FE825452E84032FB91F719174BC2E59A51987B8B84BED1DEE8094B628600ED30174FFAD63269F236F9AD50E971E3DC98A5D05276DD3D85EDA1509BAEFCB317A6790A685BA582FEC25FB493253DA30DE78D1A84B2F892103EE6B551D91FD125971EFCDF086FBF97F8185</code></pre>
<pre><code>encrypted_data = DC401F934F27792176C356E6C8ED46FCC2D40000656E9306F3B65A66F90E759658EF0D1A60A7A1E1A860B93B0A47C3A5FAF0DD2B54356EF6043551994E66D9C647FCC1FDA3CCA4FF3DCBB2F86944D1C0D5050854F3AEC1EC9A83B26641E25339A3F8F6FCA2AD0618841BA5199BCDCDF8E9DA1F7FA88D8FB8B184DFD7CD8AC94560985C368F55C86C5F9FC2CB034A466898599FCE478B92887DF9AC80D827FFA3AA038E23E21AD3EB828F27E8D5541D16BF661B7B7A61080907538F1433EDFBCDB11321CB1950EC10117740C3A69068423BA556DDA8E935F8394103D90F1EB70D1902052337CF5A36D818732C7E1C9B1645D20F1F845CC61FFFA086E8E11B4629</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 20 4E 03 00 EE 0C 94 66
0010 | 40 01 00 00 BE E4 12 D7 97 54 B5 97 0F EC 0D 63
0020 | 16 2C 80 52 33 C8 E5 18 8A C0 CE 2C D5 BD D5 93
0030 | 86 26 E2 71 F7 E5 65 0E 04 45 D4 3E E7 00 00 00
0040 | 04 45 F4 BF 2F 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 B9 CE B5 28 76 98 BD E5 FC 2C 85 3E
0060 | D3 E5 31 6A D7 DB 81 4D 43 0A B5 17 B2 68 CA 91
0070 | 73 19 50 61 AA 8C B5 E7 0D C7 DE FA BD 26 76 EC
0080 | BC FB 48 B6 D5 38 1E B4 3C D5 B1 35 39 74 AB BD
0090 | B9 72 1C 4E 2A DE E4 9A 7C 04 5B 9B 87 A7 4F F9
00A0 | 41 AC 57 73 0C 9C E5 93 2F A9 BC C9 87 0B EE EB
00B0 | 2B D9 1C D3 12 82 9C D4 5A BD 85 E1 7E F5 FD C4
00C0 | 49 26 0D D2 2F C6 DA 89 8C 4D DE C0 71 A1 FF 5C
00D0 | 67 50 96 44 C9 1F 8F D7 B0 D6 B0 67 36 69 0D 1F
00E0 | 9A EB 2E 02 37 52 AE 61 BD 7D 4F E8 25 45 2E 84
00F0 | 03 2F B9 1F 71 91 74 BC 2E 59 A5 19 87 B8 B8 4B
0100 | ED 1D EE 80 94 B6 28 60 0E D3 01 74 FF AD 63 26
0110 | 9F 23 6F 9A D5 0E 97 1E 3D C9 8A 5D 05 27 6D D3
0120 | D8 5E DA 15 09 BA EF CB 31 7A 67 90 A6 85 BA 58
0130 | 2F EC 25 FB 49 32 53 DA 30 DE 78 D1 A8 4B 2F 89
0140 | 21 03 EE 6B 55 1D 91 FD 12 59 71 EF CD F0 86 FB
0150 | F9 7F 81 85</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 20 5F 09 00 58 AD 96 66
0010 | 40 01 00 00 BE E4 12 D7 17 50 E8 58 D3 21 1A F9
0020 | 97 FF 63 38 14 87 00 9E 0B ED 9E E8 16 1D 54 6C
0030 | 7E 8F 19 68 58 00 BF 8C 04 43 3F DD DD 00 00 00
0040 | 04 6F 26 9B 37 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 DC 40 1F 93 4F 27 79 21 76 C3 56 E6
0060 | C8 ED 46 FC C2 D4 00 00 65 6E 93 06 F3 B6 5A 66
0070 | F9 0E 75 96 58 EF 0D 1A 60 A7 A1 E1 A8 60 B9 3B
0080 | 0A 47 C3 A5 FA F0 DD 2B 54 35 6E F6 04 35 51 99
0090 | 4E 66 D9 C6 47 FC C1 FD A3 CC A4 FF 3D CB B2 F8
00A0 | 69 44 D1 C0 D5 05 08 54 F3 AE C1 EC 9A 83 B2 66
00B0 | 41 E2 53 39 A3 F8 F6 FC A2 AD 06 18 84 1B A5 19
00C0 | 9B CD CD F8 E9 DA 1F 7F A8 8D 8F B8 B1 84 DF D7
00D0 | CD 8A C9 45 60 98 5C 36 8F 55 C8 6C 5F 9F C2 CB
00E0 | 03 4A 46 68 98 59 9F CE 47 8B 92 88 7D F9 AC 80
00F0 | D8 27 FF A3 AA 03 8E 23 E2 1A D3 EB 82 8F 27 E8
0100 | D5 54 1D 16 BF 66 1B 7B 7A 61 08 09 07 53 8F 14
0110 | 33 ED FB CD B1 13 21 CB 19 50 EC 10 11 77 40 C3
0120 | A6 90 68 42 3B A5 56 DD A8 E9 35 F8 39 41 03 D9
0130 | 0F 1E B7 0D 19 02 05 23 37 CF 5A 36 D8 18 73 2C
0140 | 7E 1C 9B 16 45 D2 0F 1F 84 5C C6 1F FF A0 86 E8
0150 | E1 1B 46 29</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 = 9F5DE315552DEDDFB4BB2AA7D4FBBF6558CB75342792DD51EC17B9CD3
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>204E0300EE0C9466</code></td>
<td><code>205F090058AD9666</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 = 9F5DE315552DEDDFB4BB2AA7D4FBBF6558CB75342792DD51EC17B9CD3
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>9754B5970FEC0D63162C805233C8E518</code></td>
<td><code>1750E858D3211AF997FF63381487009E</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>8AC0CE2CD5BDD5938626E271F7E5650E</code></td>
<td><code>0BED9EE8161D546C7E8F19685800BF8C</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>p</td>
<td>56, 8</td>
<td><code>0445D43EE7000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1171537639</td>
<td><code>04433FDDDD000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1128259037</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>0445F4BF2F000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1173667631</td>
<td><code>046F269B37000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1864801079</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 = 9F5DE315552DEDDFB4BB2AA7D4FBBF6558CB75342792DD51EC17B9CD3
<tr>
<td>encrypted_data</td>
<td>80, 260</td>
<td><code>FE000100B9CEB5287698BDE5FC2C853E</code> <code>D3E5316AD7DB814D430AB517B268CA91</code> <code>73195061AA8CB5E70DC7DEFABD2676EC</code> <code>BCFB48B6D5381EB43CD5B1353974ABBD</code> <code>B9721C4E2ADEE49A7C045B9B87A74FF9</code> <code>41AC57730C9CE5932FA9BCC9870BEEEB</code> <code>2BD91CD312829CD45ABD85E17EF5FDC4</code> <code>49260DD22FC6DA898C4DDEC071A1FF5C</code> <code>67509644C91F8FD7B0D6B06736690D1F</code> <code>9AEB2E023752AE61BD7D4FE825452E84</code> <code>032FB91F719174BC2E59A51987B8B84B</code> <code>ED1DEE8094B628600ED30174FFAD6326</code> <code>9F236F9AD50E971E3DC98A5D05276DD3</code> <code>D85EDA1509BAEFCB317A6790A685BA58</code> <code>2FEC25FB493253DA30DE78D1A84B2F89</code> <code>2103EE6B551D91FD125971EFCDF086FB</code><br> <code>F97F8185</code></td>
<td><code>FE000100DC401F934F27792176C356E6</code> <code>C8ED46FCC2D40000656E9306F3B65A66</code> <code>F90E759658EF0D1A60A7A1E1A860B93B</code> <code>0A47C3A5FAF0DD2B54356EF604355199</code> <code>4E66D9C647FCC1FDA3CCA4FF3DCBB2F8</code> <code>6944D1C0D5050854F3AEC1EC9A83B266</code> <code>41E25339A3F8F6FCA2AD0618841BA519</code> <code>9BCDCDF8E9DA1F7FA88D8FB8B184DFD7</code> <code>CD8AC94560985C368F55C86C5F9FC2CB</code> <code>034A466898599FCE478B92887DF9AC80</code> <code>D827FFA3AA038E23E21AD3EB828F27E8</code> <code>D5541D16BF661B7B7A61080907538F14</code> <code>33EDFBCDB11321CB1950EC10117740C3</code> <code>A69068423BA556DDA8E935F8394103D9</code> <code>0F1EB70D1902052337CF5A36D818732C</code> <code>7E1C9B1645D20F1F845CC61FFFA086E8</code><br> <code>E11B4629</code></td>
<td>Value generated above</td>
</tr>
</tbody>
@ -402,47 +402,47 @@ random_padding_bytes = 9F5DE315552DEDDFB4BB2AA7D4FBBF6558CB75342792DD51EC17B9CD3
<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 DC 80 AC EE 0C 94 66
0010 | B8 02 00 00 5C 07 E8 D0 97 54 B5 97 0F EC 0D 63
0020 | 16 2C 80 52 33 C8 E5 18 8A C0 CE 2C D5 BD D5 93
0030 | 86 26 E2 71 F7 E5 65 0E FE 50 02 00 12 C7 D6 BD
0040 | B2 5E 31 63 80 12 46 05 DC BC 05 31 2C 36 8D 4A
0050 | CE FA 8C 48 86 CB F4 A7 E5 55 C3 FF 83 0E 94 F2
0060 | 58 73 EF 43 33 35 DE B7 26 68 44 12 C8 77 02 4B
0070 | 4F C8 3B F8 B9 07 71 88 A1 ED 8C 1F A0 EA 21 18
0080 | CF 8C 47 C9 AD A3 10 E8 3A 2C 14 AD D3 A3 12 38
0090 | 97 12 7D AE 69 97 19 FD 48 AC A3 1B 90 64 B1 41
00A0 | 1B 73 65 68 63 68 83 EC BF 3F EA C5 39 37 4A 37
00B0 | 31 F0 DB B5 80 8D 02 34 1A 0F 5C C9 AF 5A E9 09
00C0 | 38 1E 1D 0B 93 89 9C 51 F6 F0 1D CD 8D 1F 05 3F
00D0 | D9 ED 88 96 54 EA 40 EC 79 7F 56 D1 B8 60 3D A4
00E0 | 70 BB C4 EC B1 43 9B D8 67 AF 2E A9 BE C9 0C 2D
00F0 | E5 7C D9 0D C1 8B 76 0A 4E DE E3 41 E5 5A 16 C7
0100 | 59 B9 30 49 47 9E 2B 8C 9B A0 52 F5 17 53 0A CE
0110 | C1 D8 1C CC 3E 3C 5B BB 6A A3 B3 72 27 E7 2A 57
0120 | CD DD DD 8A 23 E8 95 78 88 1B 2C F6 40 C0 EA 1D
0130 | 12 D0 6C 1B 1B 31 B9 35 1C 5D C5 9A 9A 11 1D 89
0140 | F3 54 C1 FE 9B A6 C8 EC 98 B9 65 A5 BB B2 FC A0
0150 | 03 E1 3C 5E E5 42 16 9F AF 7E 98 95 74 F6 B3 09
0160 | CB 4D CB BD 00 74 67 B5 36 BE FC 6D C2 F5 65 39
0170 | 13 90 64 DF 34 31 9F D8 5A F0 7C 2F 1B 5D 30 B2
0180 | CB 3A 55 64 D9 4A ED D2 AE E1 11 A1 67 3A 1A 1E
0190 | B5 8B E3 10 6D 3A 87 EC 21 18 37 F6 85 71 D5 32
01A0 | 8F 42 7A 73 F7 3C 82 5A 12 AB 5F 9C 13 0A 0B 71
01B0 | 6A 30 37 DD EE C2 CF 2F 1D 1B 14 76 3D 13 47 3B
01C0 | BF 5A 56 0C 64 58 CF A3 12 F5 0F A2 38 60 7C 1C
01D0 | 25 02 0C 63 34 0D B3 E5 4F B6 11 12 50 F2 A7 0B
01E0 | BB A5 BF 41 12 D9 1E BE 48 5F 30 73 47 DD DB 76
01F0 | 76 D2 5C 0A 4F 25 7F 37 38 2A 1D BA 7D A2 FE EE
0200 | DC D4 B9 FF D0 98 B4 F4 9D B0 75 A8 D9 AB AE EC
0210 | 98 AD E5 01 4B 25 AF 1A EB 6E E2 83 21 1A 12 8C
0220 | E3 B9 30 43 EC 7F 0D 5F 36 07 D4 64 B4 09 EE 43
0230 | 26 98 4D 73 B7 E1 0F 58 64 63 53 1B 07 55 07 BF
0240 | C5 D7 A7 31 07 75 36 8E FB 7C 53 D8 81 55 90 50
0250 | EC 1B E2 98 6D A2 D7 AB F4 06 E6 90 34 57 F4 94
0260 | FD 19 E3 F9 CE 08 FB 64 F3 8B 6C BC E8 46 C8 34
0270 | 41 22 12 C3 53 02 82 94 57 78 49 79 92 67 8D 0A
0280 | 96 E4 F5 45 D3 9E 60 96 51 CA 16 1A</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 38 84 5B 59 AD 96 66
0010 | AC 02 00 00 5C 07 E8 D0 17 50 E8 58 D3 21 1A F9
0020 | 97 FF 63 38 14 87 00 9E 0B ED 9E E8 16 1D 54 6C
0030 | 7E 8F 19 68 58 00 BF 8C FE 50 02 00 51 E6 98 0D
0040 | 2E 9C 46 66 27 48 C7 21 F6 0C C1 9A 1B AA D2 F7
0050 | CE AE 98 87 C9 BF B6 1D D6 DB 13 B2 7F 94 B7 B5
0060 | FB 57 31 9D D8 FD 17 4E C5 AD 81 DE 75 14 C9 F8
0070 | 87 13 E6 0A 04 B1 F5 2C B4 9A E5 71 F0 E3 05 18
0080 | 49 12 4E 63 52 F4 94 F3 F3 2A 90 F3 8E B9 53 C2
0090 | 6D AA 2B C1 C5 E0 90 0A 82 BA 1F C8 E9 43 80 E2
00A0 | 15 A2 A3 4D 83 40 14 C1 FE 04 4E 65 69 0D BD FC
00B0 | 6B 5F 70 F5 60 11 7A 79 92 C6 B6 15 92 91 EB 9D
00C0 | 68 52 74 62 33 97 E1 53 3D 2B DF EC F5 C6 04 B9
00D0 | 20 40 B0 6B 9E 80 4C 45 0E 72 16 A6 47 6A A7 AA
00E0 | A2 D3 4D F1 8D 31 37 0C 95 63 89 61 94 53 6F C7
00F0 | 78 28 B1 8D A7 09 A1 70 52 E8 29 71 E0 AC 81 DE
0100 | A9 37 29 DD 18 E9 BF 36 C8 56 E8 9C 6F B0 E8 A7
0110 | A2 20 BA A3 1B 47 B3 20 CB 37 6B 11 81 A2 6C 23
0120 | 55 23 D6 31 D3 9C 2F 1D FE D5 59 C6 C2 D2 68 E2
0130 | 83 DE 33 39 36 79 4A DD F1 3F 83 54 F2 1C C6 72
0140 | 5D 09 65 95 E9 6F 67 0A B8 A5 7C E9 BA 95 B5 D6
0150 | AB E8 AF A3 04 8D 52 A3 AB 77 8F AC F8 C9 9F 64
0160 | E1 01 DE 26 5C 3C 85 73 C0 78 13 F3 62 34 8C B5
0170 | 03 85 3B 3D 8C 04 C7 08 BD 28 A2 70 4E B8 AB D8
0180 | 42 BB 11 C6 42 62 FA 71 90 EE 14 86 55 EB 1E 75
0190 | FF 36 91 38 A8 8A E3 A7 CA 79 64 62 7F 90 57 CF
01A0 | 18 70 3F 40 BF AF 7F 08 3B 5B 37 AB 3C A5 BB 1A
01B0 | B8 78 E3 40 0C 53 AA D2 5A 52 CC 75 37 93 FE 91
01C0 | FB 1A F9 28 5A C9 0D 42 7F 11 E9 BE 52 F4 CD B6
01D0 | A6 62 60 BF FE 6E CA FD E2 2E D3 B0 D3 16 0B AA
01E0 | 01 59 37 B3 5A 05 63 31 92 1B CF F9 8D 6D 26 F9
01F0 | 78 5D 4F BF F8 98 90 FC C3 5F 00 43 01 91 21 46
0200 | 77 F2 48 E4 63 FB 83 C9 AF B1 E6 2F 25 4C 23 03
0210 | B8 B0 E4 CA E8 A8 8F FD 93 2A AA D3 1C 43 CC A0
0220 | 94 87 E7 F2 5F 4B E6 CC 25 A7 DC 6F 21 DC 35 D9
0230 | 00 5F 67 AA 09 9A 53 C4 AC 30 E9 9D 97 6A E1 AF
0240 | D1 0F 17 94 0A 36 16 F5 E6 1D 95 04 A0 23 CE 99
0250 | 23 5F B8 30 0E 17 B3 6B 96 87 65 42 9B 1C 15 78
0260 | 29 A0 EB 97 B7 A1 DF 06 5C 8E 42 69 B1 33 E8 E7
0270 | 0A 20 19 55 33 61 D4 05 A6 83 CE 5F AB 2E 1C 9B
0280 | 61 51 1D 6A 80 25 7E 85 5E B5 6A 5F</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 = 9F5DE315552DEDDFB4BB2AA7D4FBBF6558CB75342792DD51EC17B9CD3
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>01DC80ACEE0C9466</code></td>
<td><code>0138845B59AD9666</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>B8020000</code> (696 in decimal)</td>
<td><code>AC020000</code> (684 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -482,19 +482,19 @@ random_padding_bytes = 9F5DE315552DEDDFB4BB2AA7D4FBBF6558CB75342792DD51EC17B9CD3
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>9754B5970FEC0D63162C805233C8E518</code></td>
<td><code>1750E858D3211AF997FF63381487009E</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>8AC0CE2CD5BDD5938626E271F7E5650E</code></td>
<td><code>0BED9EE8161D546C7E8F19685800BF8C</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_answer</td>
<td>56, 596</td>
<td><code>FE50020012C7D6BDB25E316380124605</code> <code>DCBC05312C368D4ACEFA8C4886CBF4A7</code> <code>E555C3FF830E94F25873EF433335DEB7</code> <code>26684412C877024B4FC83BF8B9077188</code> <code>A1ED8C1FA0EA2118CF8C47C9ADA310E8</code> <code>3A2C14ADD3A3123897127DAE699719FD</code> <code>48ACA31B9064B1411B736568636883EC</code> <code>BF3FEAC539374A3731F0DBB5808D0234</code> <code>1A0F5CC9AF5AE909381E1D0B93899C51</code> <code>F6F01DCD8D1F053FD9ED889654EA40EC</code> <code>797F56D1B8603DA470BBC4ECB1439BD8</code> <code>67AF2EA9BEC90C2DE57CD90DC18B760A</code> <code>4EDEE341E55A16C759B93049479E2B8C</code> <code>9BA052F517530ACEC1D81CCC3E3C5BBB</code> <code>6AA3B37227E72A57CDDDDD8A23E89578</code> <code>881B2CF640C0EA1D12D06C1B1B31B935</code> <code>1C5DC59A9A111D89F354C1FE9BA6C8EC</code> <code>98B965A5BBB2FCA003E13C5EE542169F</code> <code>AF7E989574F6B309CB4DCBBD007467B5</code> <code>36BEFC6DC2F56539139064DF34319FD8</code> <code>5AF07C2F1B5D30B2CB3A5564D94AEDD2</code> <code>AEE111A1673A1A1EB58BE3106D3A87EC</code> <code>211837F68571D5328F427A73F73C825A</code> <code>12AB5F9C130A0B716A3037DDEEC2CF2F</code> <code>1D1B14763D13473BBF5A560C6458CFA3</code> <code>12F50FA238607C1C25020C63340DB3E5</code> <code>4FB6111250F2A70BBBA5BF4112D91EBE</code> <code>485F307347DDDB7676D25C0A4F257F37</code> <code>382A1DBA7DA2FEEEDCD4B9FFD098B4F4</code> <code>9DB075A8D9ABAEEC98ADE5014B25AF1A</code> <code>EB6EE283211A128CE3B93043EC7F0D5F</code> <code>3607D464B409EE4326984D73B7E10F58</code> <code>6463531B075507BFC5D7A7310775368E</code> <code>FB7C53D881559050EC1BE2986DA2D7AB</code> <code>F406E6903457F494FD19E3F9CE08FB64</code> <code>F38B6CBCE846C834412212C353028294</code> <code>5778497992678D0A96E4F545D39E6096</code><br> <code>51CA161A</code></td>
<td><code>FE50020051E6980D2E9C46662748C721</code> <code>F60CC19A1BAAD2F7CEAE9887C9BFB61D</code> <code>D6DB13B27F94B7B5FB57319DD8FD174E</code> <code>C5AD81DE7514C9F88713E60A04B1F52C</code> <code>B49AE571F0E3051849124E6352F494F3</code> <code>F32A90F38EB953C26DAA2BC1C5E0900A</code> <code>82BA1FC8E94380E215A2A34D834014C1</code> <code>FE044E65690DBDFC6B5F70F560117A79</code> <code>92C6B6159291EB9D685274623397E153</code> <code>3D2BDFECF5C604B92040B06B9E804C45</code> <code>0E7216A6476AA7AAA2D34DF18D31370C</code> <code>9563896194536FC77828B18DA709A170</code> <code>52E82971E0AC81DEA93729DD18E9BF36</code> <code>C856E89C6FB0E8A7A220BAA31B47B320</code> <code>CB376B1181A26C235523D631D39C2F1D</code> <code>FED559C6C2D268E283DE333936794ADD</code> <code>F13F8354F21CC6725D096595E96F670A</code> <code>B8A57CE9BA95B5D6ABE8AFA3048D52A3</code> <code>AB778FACF8C99F64E101DE265C3C8573</code> <code>C07813F362348CB503853B3D8C04C708</code> <code>BD28A2704EB8ABD842BB11C64262FA71</code> <code>90EE148655EB1E75FF369138A88AE3A7</code> <code>CA7964627F9057CF18703F40BFAF7F08</code> <code>3B5B37AB3CA5BB1AB878E3400C53AAD2</code> <code>5A52CC753793FE91FB1AF9285AC90D42</code> <code>7F11E9BE52F4CDB6A66260BFFE6ECAFD</code> <code>E22ED3B0D3160BAA015937B35A056331</code> <code>921BCFF98D6D26F9785D4FBFF89890FC</code> <code>C35F00430191214677F248E463FB83C9</code> <code>AFB1E62F254C2303B8B0E4CAE8A88FFD</code> <code>932AAAD31C43CCA09487E7F25F4BE6CC</code> <code>25A7DC6F21DC35D9005F67AA099A53C4</code> <code>AC30E99D976AE1AFD10F17940A3616F5</code> <code>E61D9504A023CE99235FB8300E17B36B</code> <code>968765429B1C157829A0EB97B7A1DF06</code> <code>5C8E4269B133E8E70A2019553361D405</code> <code>A683CE5FAB2E1C9B61511D6A80257E85</code><br> <code>5EB56A5F</code></td>
<td>See below</td>
</tr>
</tbody>
@ -502,20 +502,20 @@ random_padding_bytes = 9F5DE315552DEDDFB4BB2AA7D4FBBF6558CB75342792DD51EC17B9CD3
<!-- 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 = 12C7D6BDB25E316380124605DCBC05312C368D4ACEFA8C4886CBF4A7E555C3FF830E94F25873EF433335DEB726684412C877024B4FC83BF8B9077188A1ED8C1FA0EA2118CF8C47C9ADA310E83A2C14ADD3A3123897127DAE699719FD48ACA31B9064B1411B736568636883ECBF3FEAC539374A3731F0DBB5808D02341A0F5CC9AF5AE909381E1D0B93899C51F6F01DCD8D1F053FD9ED889654EA40EC797F56D1B8603DA470BBC4ECB1439BD867AF2EA9BEC90C2DE57CD90DC18B760A4EDEE341E55A16C759B93049479E2B8C9BA052F517530ACEC1D81CCC3E3C5BBB6AA3B37227E72A57CDDDDD8A23E89578881B2CF640C0EA1D12D06C1B1B31B9351C5DC59A9A111D89F354C1FE9BA6C8EC98B965A5BBB2FCA003E13C5EE542169FAF7E989574F6B309CB4DCBBD007467B536BEFC6DC2F56539139064DF34319FD85AF07C2F1B5D30B2CB3A5564D94AEDD2AEE111A1673A1A1EB58BE3106D3A87EC211837F68571D5328F427A73F73C825A12AB5F9C130A0B716A3037DDEEC2CF2F1D1B14763D13473BBF5A560C6458CFA312F50FA238607C1C25020C63340DB3E54FB6111250F2A70BBBA5BF4112D91EBE485F307347DDDB7676D25C0A4F257F37382A1DBA7DA2FEEEDCD4B9FFD098B4F49DB075A8D9ABAEEC98ADE5014B25AF1AEB6EE283211A128CE3B93043EC7F0D5F3607D464B409EE4326984D73B7E10F586463531B075507BFC5D7A7310775368EFB7C53D881559050EC1BE2986DA2D7ABF406E6903457F494FD19E3F9CE08FB64F38B6CBCE846C834412212C3530282945778497992678D0A96E4F545D39E609651CA161A
tmp_aes_key = C2F7580474D179EC4E8C6B6ADCF2E5AF59786052BAFB36DEFADC6C3761698BDB
tmp_aes_iv = 1452BE5DDAFB78E9269B4B2546C35B6E64B19D446BEF6AF35E9323B120DF2EC3</code></pre>
<pre><code>encrypted_answer = 51E6980D2E9C46662748C721F60CC19A1BAAD2F7CEAE9887C9BFB61DD6DB13B27F94B7B5FB57319DD8FD174EC5AD81DE7514C9F88713E60A04B1F52CB49AE571F0E3051849124E6352F494F3F32A90F38EB953C26DAA2BC1C5E0900A82BA1FC8E94380E215A2A34D834014C1FE044E65690DBDFC6B5F70F560117A7992C6B6159291EB9D685274623397E1533D2BDFECF5C604B92040B06B9E804C450E7216A6476AA7AAA2D34DF18D31370C9563896194536FC77828B18DA709A17052E82971E0AC81DEA93729DD18E9BF36C856E89C6FB0E8A7A220BAA31B47B320CB376B1181A26C235523D631D39C2F1DFED559C6C2D268E283DE333936794ADDF13F8354F21CC6725D096595E96F670AB8A57CE9BA95B5D6ABE8AFA3048D52A3AB778FACF8C99F64E101DE265C3C8573C07813F362348CB503853B3D8C04C708BD28A2704EB8ABD842BB11C64262FA7190EE148655EB1E75FF369138A88AE3A7CA7964627F9057CF18703F40BFAF7F083B5B37AB3CA5BB1AB878E3400C53AAD25A52CC753793FE91FB1AF9285AC90D427F11E9BE52F4CDB6A66260BFFE6ECAFDE22ED3B0D3160BAA015937B35A056331921BCFF98D6D26F9785D4FBFF89890FCC35F00430191214677F248E463FB83C9AFB1E62F254C2303B8B0E4CAE8A88FFD932AAAD31C43CCA09487E7F25F4BE6CC25A7DC6F21DC35D9005F67AA099A53C4AC30E99D976AE1AFD10F17940A3616F5E61D9504A023CE99235FB8300E17B36B968765429B1C157829A0EB97B7A1DF065C8E4269B133E8E70A2019553361D405A683CE5FAB2E1C9B61511D6A80257E855EB56A5F
tmp_aes_key = D6033BBD460A7C02ED99D2D600E445877B7BA4AF941E17E30626C8958828F6A4
tmp_aes_iv = 0F195798C07F0E6F392CD4C04D237034D3647749B6D43C42EBC0D0DE8A2F9F65</code></pre>
<!-- end server_DH_inner_data_input -->
<p>Yielding:</p>
<!-- start server_DH_inner_data_output -->
<pre><code>answer_with_hash = CF44C94027F7AFE77C81FB73FCDBC7579528F779BA0D89B59754B5970FEC0D63162C805233C8E5188AC0CE2CD5BDD5938626E271F7E5650E03000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE0001003CA1615FD7A12DC9D02243706D597F835B13EFF48469894F79C512C489DDFB44EEFC424AB23E68CD2F2F030BA38114BEED05CB5E7458DA3DC56AA07D4CAAB7FFD6AE1F9E2B6C219B77A76A87D994B18D6B5D51F6514E7D9D0E5AEDEEAB1957E4DB20A069682DD71C59292567A10EB3C8CFF560045F64ACCAF18721EF98730918CEBBC4D4B57272307DB6D07DF3932B50104A372DBC6EB165406C2C3C75FB777C12A00DD9327A04F3B7874CF8EA013C68224579584FED1751E1BBA7EBB1CE1A6453DE82E1F40D8B225F19361FE501E13C8E5F06C8C46BCBC1D47607C5F38178541987F060A7DA482DA5166DFEA05BC6DE4B7A796E337F87FC932C348BE7494780EE0C9466409A3DC7D5D0608A
answer = BA0D89B59754B5970FEC0D63162C805233C8E5188AC0CE2CD5BDD5938626E271F7E5650E03000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE0001003CA1615FD7A12DC9D02243706D597F835B13EFF48469894F79C512C489DDFB44EEFC424AB23E68CD2F2F030BA38114BEED05CB5E7458DA3DC56AA07D4CAAB7FFD6AE1F9E2B6C219B77A76A87D994B18D6B5D51F6514E7D9D0E5AEDEEAB1957E4DB20A069682DD71C59292567A10EB3C8CFF560045F64ACCAF18721EF98730918CEBBC4D4B57272307DB6D07DF3932B50104A372DBC6EB165406C2C3C75FB777C12A00DD9327A04F3B7874CF8EA013C68224579584FED1751E1BBA7EBB1CE1A6453DE82E1F40D8B225F19361FE501E13C8E5F06C8C46BCBC1D47607C5F38178541987F060A7DA482DA5166DFEA05BC6DE4B7A796E337F87FC932C348BE7494780EE0C9466409A3DC7D5D0608A</code></pre>
<pre><code>answer_with_hash = 707AE5637E422848D9507A2CDA3435703416532CBA0D89B51750E858D3211AF997FF63381487009E0BED9EE8161D546C7E8F19685800BF8C03000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100B306B55DB37C55EDB9980AE4F7EC571EA89F6B880E19CF817B436811EF855A75D375848B8BD7653770E74847FADABBF565B0FF261F4686E389332E0B0208243E3E5C37DEBDD223DACADADB800F7520693EE4C8EA483EF21AAB1621DCD3CC8146EFB7A6213C0851926BCA0B528CA181C6EDBB515D0AB9230F636FCA72D21F32BF95D76BA330D41DD0F05EF72FF70747FC0B5D56DA5E3FEBED3F49DFB9343D600C7856675881A083AA61D61E73ABF35D5E038C291796D4021BAD6BCF3F9CE3A57FA25660292D7F3FF12DE0394D90E3B711C7E72AC06BB06CB753567972093DA8FCA3758B571375B1208D0CAEB7FF0E576A48D67782CE6DD9ABB81C7A18F517165259AD96669A37D9D2B4939598
answer = BA0D89B51750E858D3211AF997FF63381487009E0BED9EE8161D546C7E8F19685800BF8C03000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100B306B55DB37C55EDB9980AE4F7EC571EA89F6B880E19CF817B436811EF855A75D375848B8BD7653770E74847FADABBF565B0FF261F4686E389332E0B0208243E3E5C37DEBDD223DACADADB800F7520693EE4C8EA483EF21AAB1621DCD3CC8146EFB7A6213C0851926BCA0B528CA181C6EDBB515D0AB9230F636FCA72D21F32BF95D76BA330D41DD0F05EF72FF70747FC0B5D56DA5E3FEBED3F49DFB9343D600C7856675881A083AA61D61E73ABF35D5E038C291796D4021BAD6BCF3F9CE3A57FA25660292D7F3FF12DE0394D90E3B711C7E72AC06BB06CB753567972093DA8FCA3758B571375B1208D0CAEB7FF0E576A48D67782CE6DD9ABB81C7A18F517165259AD96669A37D9D2B4939598</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 97 54 B5 97 0F EC 0D 63 16 2C 80 52
0010 | 33 C8 E5 18 8A C0 CE 2C D5 BD D5 93 86 26 E2 71
0020 | F7 E5 65 0E 03 00 00 00 FE 00 01 00 C7 1C AE B9
<pre><code>0000 | BA 0D 89 B5 17 50 E8 58 D3 21 1A F9 97 FF 63 38
0010 | 14 87 00 9E 0B ED 9E E8 16 1D 54 6C 7E 8F 19 68
0020 | 58 00 BF 8C 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 = BA0D89B59754B5970FEC0D63162C805233C8E5188AC0CE2CD5BDD5938626E271F7E5650
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 | 3C A1 61 5F D7 A1 2D C9 D0 22 43 70 6D 59 7F 83
0140 | 5B 13 EF F4 84 69 89 4F 79 C5 12 C4 89 DD FB 44
0150 | EE FC 42 4A B2 3E 68 CD 2F 2F 03 0B A3 81 14 BE
0160 | ED 05 CB 5E 74 58 DA 3D C5 6A A0 7D 4C AA B7 FF
0170 | D6 AE 1F 9E 2B 6C 21 9B 77 A7 6A 87 D9 94 B1 8D
0180 | 6B 5D 51 F6 51 4E 7D 9D 0E 5A ED EE AB 19 57 E4
0190 | DB 20 A0 69 68 2D D7 1C 59 29 25 67 A1 0E B3 C8
01A0 | CF F5 60 04 5F 64 AC CA F1 87 21 EF 98 73 09 18
01B0 | CE BB C4 D4 B5 72 72 30 7D B6 D0 7D F3 93 2B 50
01C0 | 10 4A 37 2D BC 6E B1 65 40 6C 2C 3C 75 FB 77 7C
01D0 | 12 A0 0D D9 32 7A 04 F3 B7 87 4C F8 EA 01 3C 68
01E0 | 22 45 79 58 4F ED 17 51 E1 BB A7 EB B1 CE 1A 64
01F0 | 53 DE 82 E1 F4 0D 8B 22 5F 19 36 1F E5 01 E1 3C
0200 | 8E 5F 06 C8 C4 6B CB C1 D4 76 07 C5 F3 81 78 54
0210 | 19 87 F0 60 A7 DA 48 2D A5 16 6D FE A0 5B C6 DE
0220 | 4B 7A 79 6E 33 7F 87 FC 93 2C 34 8B E7 49 47 80
0230 | EE 0C 94 66</code></pre>
0130 | B3 06 B5 5D B3 7C 55 ED B9 98 0A E4 F7 EC 57 1E
0140 | A8 9F 6B 88 0E 19 CF 81 7B 43 68 11 EF 85 5A 75
0150 | D3 75 84 8B 8B D7 65 37 70 E7 48 47 FA DA BB F5
0160 | 65 B0 FF 26 1F 46 86 E3 89 33 2E 0B 02 08 24 3E
0170 | 3E 5C 37 DE BD D2 23 DA CA DA DB 80 0F 75 20 69
0180 | 3E E4 C8 EA 48 3E F2 1A AB 16 21 DC D3 CC 81 46
0190 | EF B7 A6 21 3C 08 51 92 6B CA 0B 52 8C A1 81 C6
01A0 | ED BB 51 5D 0A B9 23 0F 63 6F CA 72 D2 1F 32 BF
01B0 | 95 D7 6B A3 30 D4 1D D0 F0 5E F7 2F F7 07 47 FC
01C0 | 0B 5D 56 DA 5E 3F EB ED 3F 49 DF B9 34 3D 60 0C
01D0 | 78 56 67 58 81 A0 83 AA 61 D6 1E 73 AB F3 5D 5E
01E0 | 03 8C 29 17 96 D4 02 1B AD 6B CF 3F 9C E3 A5 7F
01F0 | A2 56 60 29 2D 7F 3F F1 2D E0 39 4D 90 E3 B7 11
0200 | C7 E7 2A C0 6B B0 6C B7 53 56 79 72 09 3D A8 FC
0210 | A3 75 8B 57 13 75 B1 20 8D 0C AE B7 FF 0E 57 6A
0220 | 48 D6 77 82 CE 6D D9 AB B8 1C 7A 18 F5 17 16 52
0230 | 59 AD 96 66</code></pre>
<p>Payload (de)serialization:</p>
<pre><code>server_DH_inner_data#b5890dba nonce:int128 server_nonce:int128 g:int dh_prime:string g_a:string server_time:int = Server_DH_inner_data;</code></pre>
<table class="table">
@ -570,13 +570,13 @@ answer = BA0D89B59754B5970FEC0D63162C805233C8E5188AC0CE2CD5BDD5938626E271F7E5650
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>9754B5970FEC0D63162C805233C8E518</code></td>
<td><code>1750E858D3211AF997FF63381487009E</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>8AC0CE2CD5BDD5938626E271F7E5650E</code></td>
<td><code>0BED9EE8161D546C7E8F19685800BF8C</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
@ -594,13 +594,13 @@ answer = BA0D89B59754B5970FEC0D63162C805233C8E5188AC0CE2CD5BDD5938626E271F7E5650
<tr>
<td>g_a</td>
<td>300, 260</td>
<td><code>FE0001003CA1615FD7A12DC9D0224370</code> <code>6D597F835B13EFF48469894F79C512C4</code> <code>89DDFB44EEFC424AB23E68CD2F2F030B</code> <code>A38114BEED05CB5E7458DA3DC56AA07D</code> <code>4CAAB7FFD6AE1F9E2B6C219B77A76A87</code> <code>D994B18D6B5D51F6514E7D9D0E5AEDEE</code> <code>AB1957E4DB20A069682DD71C59292567</code> <code>A10EB3C8CFF560045F64ACCAF18721EF</code> <code>98730918CEBBC4D4B57272307DB6D07D</code> <code>F3932B50104A372DBC6EB165406C2C3C</code> <code>75FB777C12A00DD9327A04F3B7874CF8</code> <code>EA013C68224579584FED1751E1BBA7EB</code> <code>B1CE1A6453DE82E1F40D8B225F19361F</code> <code>E501E13C8E5F06C8C46BCBC1D47607C5</code> <code>F38178541987F060A7DA482DA5166DFE</code> <code>A05BC6DE4B7A796E337F87FC932C348B</code><br> <code>E7494780</code></td>
<td><code>FE000100B306B55DB37C55EDB9980AE4</code> <code>F7EC571EA89F6B880E19CF817B436811</code> <code>EF855A75D375848B8BD7653770E74847</code> <code>FADABBF565B0FF261F4686E389332E0B</code> <code>0208243E3E5C37DEBDD223DACADADB80</code> <code>0F7520693EE4C8EA483EF21AAB1621DC</code> <code>D3CC8146EFB7A6213C0851926BCA0B52</code> <code>8CA181C6EDBB515D0AB9230F636FCA72</code> <code>D21F32BF95D76BA330D41DD0F05EF72F</code> <code>F70747FC0B5D56DA5E3FEBED3F49DFB9</code> <code>343D600C7856675881A083AA61D61E73</code> <code>ABF35D5E038C291796D4021BAD6BCF3F</code> <code>9CE3A57FA25660292D7F3FF12DE0394D</code> <code>90E3B711C7E72AC06BB06CB753567972</code> <code>093DA8FCA3758B571375B1208D0CAEB7</code> <code>FF0E576A48D67782CE6DD9ABB81C7A18</code><br> <code>F5171652</code></td>
<td><code>g_a</code> diffie-hellman parameter</td>
</tr>
<tr>
<td>server_time</td>
<td>560, 4</td>
<td><code>EE0C9466</code> (1720978670 in decimal)</td>
<td><code>59AD9666</code> (1721150809 in decimal)</td>
<td>Server time</td>
</tr>
</tbody>
@ -609,34 +609,34 @@ answer = BA0D89B59754B5970FEC0D63162C805233C8E5188AC0CE2CD5BDD5938626E271F7E5650
<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 = 3E6C90B1A0D6814B1535DA33E11C044D8B515D4AE77D5F07013D630DF93DA84F7AB8B474C55A78118259993FCF6261B3825F2A70F1145E315B4F96DD098A53F20CF97FE09F537A341BE10EF9A12DB2FBB8E8AEA5D8E45CA4B03B77BCED83DFEE5CE8C48348688CB5BDA1951FE87CD54D7D0C3B9E907AA74ED7A5E29A9EE18236C4222299FBB2431D9E2F56E6A8D2235ADEB0EBFBED64731375936C536ED5B06BBBA394894A1519876B5A521658761F41B9CA2E8BB485407314BD13B39C2DD3E2D0467D4E82809E359BF4D6677CA22B1BA2D04B884AD49274D8FD8EC3CCAD321DE4257700F26384983A6AD2C06D8613544A0F091184B2BBDBFF8268C36641B809</code></pre>
<pre><code>b = 7152AAB0367C48091DF69146FC9CE22D159C41C5BDFDA8EF171AC5CE3322C27A5218B01697A2FF0FF3FF5AF6F844F9681D192D5A528A774CBC1EE49EC1C31A9AF038DD44BCD84DAC5B0FB00181F724FC49D8C6B98960551D576C5625740FC84569FCF88F8933EDEF3BCB39057E741521E872697AF80F33019058ADA1B63A9680C5952C2183A7EE09B19E259DD485D8E68F5EB1532BADFE441692719C64F88C36DCADF0BF3D057D0BB00E6D210359A6B15DC81AF9E0AA3267FAD263E0172920F342659150D45BCC1CC961177E3ACAC4AEBDC10B159337284833501C248DAF81E1E4357B0398AE4822852BE132EBAE55E7F1E78E18696E73D143CE21C3067462AE</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 = ACDC3D0F5170015A9A0EC15B3635DE252A49F4E5AEDA12395A26FA7FF1D10BB63D827C53189E32B433EE621024C9323052A1661964F8C5B03A5292736C9EF3532859371200DAF09122B69D8FE865E9182EFE7324A71A01031CAF150FD371020CB02D102BC933D8F9B8B62093E09A08414C8297E46CF34CA728345F2ADDFC044F6931B277665256C139026A0C8A1D8B24908CAD49D596B49ACE3EEA09B4AA1A658E9E23E051C535C363D31A5DC5C2FE8BF1ED5BF69EB626FDDC402FBA340A57078D0D30A54FE7AE0E75BB46F7B0E03E947163E17AA7FABE01B34E04A630287C4CA9E46F160DA7F62F41575823C94A7ADE46DBB162BEA1503942CDEAE1A371A93C</code></pre>
<pre><code>g_b = A2F08CF9322F4971F1393BDF31ECF56A8740010767A698433338CF762E402BC91F323FFFD2CA92ECEAB33A283A470997D2F42C225D24890EF4C3416AB5D559C106A194EC3D06D69F4E73D0435F8BC649108A9F2AACAAD8C056FE861BF7DB4E38C5C743A11D9952865E7B2D4B8A07E5F0310866224E1B934BBF4284F078D42ED79A537E968FDD985C5FD522BDFCAAEE1A0E97903880FCA1DF1EE5180158E4A38F1BD7FAFAE13CF72F4B8C66CD7893F10EA6AD32D479551FD825A3D6F0C9719AE34E4F971B00D7BBFCDBDFFA3520758286576F72D120D904FE538630FB7EB1CE5D23E3CB4C7B0505B30F9A6D77AA78802B83760B620EA6EEEFB616CA05388E68F8</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 97 54 B5 97 0F EC 0D 63 16 2C 80 52
0010 | 33 C8 E5 18 8A C0 CE 2C D5 BD D5 93 86 26 E2 71
0020 | F7 E5 65 0E 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | AC DC 3D 0F 51 70 01 5A 9A 0E C1 5B 36 35 DE 25
0040 | 2A 49 F4 E5 AE DA 12 39 5A 26 FA 7F F1 D1 0B B6
0050 | 3D 82 7C 53 18 9E 32 B4 33 EE 62 10 24 C9 32 30
0060 | 52 A1 66 19 64 F8 C5 B0 3A 52 92 73 6C 9E F3 53
0070 | 28 59 37 12 00 DA F0 91 22 B6 9D 8F E8 65 E9 18
0080 | 2E FE 73 24 A7 1A 01 03 1C AF 15 0F D3 71 02 0C
0090 | B0 2D 10 2B C9 33 D8 F9 B8 B6 20 93 E0 9A 08 41
00A0 | 4C 82 97 E4 6C F3 4C A7 28 34 5F 2A DD FC 04 4F
00B0 | 69 31 B2 77 66 52 56 C1 39 02 6A 0C 8A 1D 8B 24
00C0 | 90 8C AD 49 D5 96 B4 9A CE 3E EA 09 B4 AA 1A 65
00D0 | 8E 9E 23 E0 51 C5 35 C3 63 D3 1A 5D C5 C2 FE 8B
00E0 | F1 ED 5B F6 9E B6 26 FD DC 40 2F BA 34 0A 57 07
00F0 | 8D 0D 30 A5 4F E7 AE 0E 75 BB 46 F7 B0 E0 3E 94
0100 | 71 63 E1 7A A7 FA BE 01 B3 4E 04 A6 30 28 7C 4C
0110 | A9 E4 6F 16 0D A7 F6 2F 41 57 58 23 C9 4A 7A DE
0120 | 46 DB B1 62 BE A1 50 39 42 CD EA E1 A3 71 A9 3C</code></pre>
<pre><code>0000 | 54 B6 43 66 17 50 E8 58 D3 21 1A F9 97 FF 63 38
0010 | 14 87 00 9E 0B ED 9E E8 16 1D 54 6C 7E 8F 19 68
0020 | 58 00 BF 8C 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | A2 F0 8C F9 32 2F 49 71 F1 39 3B DF 31 EC F5 6A
0040 | 87 40 01 07 67 A6 98 43 33 38 CF 76 2E 40 2B C9
0050 | 1F 32 3F FF D2 CA 92 EC EA B3 3A 28 3A 47 09 97
0060 | D2 F4 2C 22 5D 24 89 0E F4 C3 41 6A B5 D5 59 C1
0070 | 06 A1 94 EC 3D 06 D6 9F 4E 73 D0 43 5F 8B C6 49
0080 | 10 8A 9F 2A AC AA D8 C0 56 FE 86 1B F7 DB 4E 38
0090 | C5 C7 43 A1 1D 99 52 86 5E 7B 2D 4B 8A 07 E5 F0
00A0 | 31 08 66 22 4E 1B 93 4B BF 42 84 F0 78 D4 2E D7
00B0 | 9A 53 7E 96 8F DD 98 5C 5F D5 22 BD FC AA EE 1A
00C0 | 0E 97 90 38 80 FC A1 DF 1E E5 18 01 58 E4 A3 8F
00D0 | 1B D7 FA FA E1 3C F7 2F 4B 8C 66 CD 78 93 F1 0E
00E0 | A6 AD 32 D4 79 55 1F D8 25 A3 D6 F0 C9 71 9A E3
00F0 | 4E 4F 97 1B 00 D7 BB FC DB DF FA 35 20 75 82 86
0100 | 57 6F 72 D1 20 D9 04 FE 53 86 30 FB 7E B1 CE 5D
0110 | 23 E3 CB 4C 7B 05 05 B3 0F 9A 6D 77 AA 78 80 2B
0120 | 83 76 0B 62 0E A6 EE EF B6 16 CA 05 38 8E 68 F8</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 = BA0D89B59754B5970FEC0D63162C805233C8E5188AC0CE2CD5BDD5938626E271F7E5650
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>9754B5970FEC0D63162C805233C8E518</code></td>
<td><code>1750E858D3211AF997FF63381487009E</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>8AC0CE2CD5BDD5938626E271F7E5650E</code></td>
<td><code>0BED9EE8161D546C7E8F19685800BF8C</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>g_b</td>
<td>36, 260</td>
<td><code>FE000100ACDC3D0F5170015A9A0EC15B</code> <code>3635DE252A49F4E5AEDA12395A26FA7F</code> <code>F1D10BB63D827C53189E32B433EE6210</code> <code>24C9323052A1661964F8C5B03A529273</code> <code>6C9EF3532859371200DAF09122B69D8F</code> <code>E865E9182EFE7324A71A01031CAF150F</code> <code>D371020CB02D102BC933D8F9B8B62093</code> <code>E09A08414C8297E46CF34CA728345F2A</code> <code>DDFC044F6931B277665256C139026A0C</code> <code>8A1D8B24908CAD49D596B49ACE3EEA09</code> <code>B4AA1A658E9E23E051C535C363D31A5D</code> <code>C5C2FE8BF1ED5BF69EB626FDDC402FBA</code> <code>340A57078D0D30A54FE7AE0E75BB46F7</code> <code>B0E03E947163E17AA7FABE01B34E04A6</code> <code>30287C4CA9E46F160DA7F62F41575823</code> <code>C94A7ADE46DBB162BEA1503942CDEAE1</code><br> <code>A371A93C</code></td>
<td><code>FE000100A2F08CF9322F4971F1393BDF</code> <code>31ECF56A8740010767A698433338CF76</code> <code>2E402BC91F323FFFD2CA92ECEAB33A28</code> <code>3A470997D2F42C225D24890EF4C3416A</code> <code>B5D559C106A194EC3D06D69F4E73D043</code> <code>5F8BC649108A9F2AACAAD8C056FE861B</code> <code>F7DB4E38C5C743A11D9952865E7B2D4B</code> <code>8A07E5F0310866224E1B934BBF4284F0</code> <code>78D42ED79A537E968FDD985C5FD522BD</code> <code>FCAAEE1A0E97903880FCA1DF1EE51801</code> <code>58E4A38F1BD7FAFAE13CF72F4B8C66CD</code> <code>7893F10EA6AD32D479551FD825A3D6F0</code> <code>C9719AE34E4F971B00D7BBFCDBDFFA35</code> <code>20758286576F72D120D904FE538630FB</code> <code>7EB1CE5D23E3CB4C7B0505B30F9A6D77</code> <code>AA78802B83760B620EA6EEEFB616CA05</code><br> <code>388E68F8</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 = BA0D89B59754B5970FEC0D63162C805233C8E5188AC0CE2CD5BDD5938626E271F7E5650
<!-- 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 = 54B643669754B5970FEC0D63162C805233C8E5188AC0CE2CD5BDD5938626E271F7E5650E0000000000000000FE000100ACDC3D0F5170015A9A0EC15B3635DE252A49F4E5AEDA12395A26FA7FF1D10BB63D827C53189E32B433EE621024C9323052A1661964F8C5B03A5292736C9EF3532859371200DAF09122B69D8FE865E9182EFE7324A71A01031CAF150FD371020CB02D102BC933D8F9B8B62093E09A08414C8297E46CF34CA728345F2ADDFC044F6931B277665256C139026A0C8A1D8B24908CAD49D596B49ACE3EEA09B4AA1A658E9E23E051C535C363D31A5DC5C2FE8BF1ED5BF69EB626FDDC402FBA340A57078D0D30A54FE7AE0E75BB46F7B0E03E947163E17AA7FABE01B34E04A630287C4CA9E46F160DA7F62F41575823C94A7ADE46DBB162BEA1503942CDEAE1A371A93C
padding = A25D98376FAAB9CE3B14A04B
tmp_aes_key = C2F7580474D179EC4E8C6B6ADCF2E5AF59786052BAFB36DEFADC6C3761698BDB
tmp_aes_iv = 1452BE5DDAFB78E9269B4B2546C35B6E64B19D446BEF6AF35E9323B120DF2EC3</code></pre>
<pre><code>data = 54B643661750E858D3211AF997FF63381487009E0BED9EE8161D546C7E8F19685800BF8C0000000000000000FE000100A2F08CF9322F4971F1393BDF31ECF56A8740010767A698433338CF762E402BC91F323FFFD2CA92ECEAB33A283A470997D2F42C225D24890EF4C3416AB5D559C106A194EC3D06D69F4E73D0435F8BC649108A9F2AACAAD8C056FE861BF7DB4E38C5C743A11D9952865E7B2D4B8A07E5F0310866224E1B934BBF4284F078D42ED79A537E968FDD985C5FD522BDFCAAEE1A0E97903880FCA1DF1EE5180158E4A38F1BD7FAFAE13CF72F4B8C66CD7893F10EA6AD32D479551FD825A3D6F0C9719AE34E4F971B00D7BBFCDBDFFA3520758286576F72D120D904FE538630FB7EB1CE5D23E3CB4C7B0505B30F9A6D77AA78802B83760B620EA6EEEFB616CA05388E68F8
padding = ED00C8F53C55B38032CF83B2
tmp_aes_key = D6033BBD460A7C02ED99D2D600E445877B7BA4AF941E17E30626C8958828F6A4
tmp_aes_iv = 0F195798C07F0E6F392CD4C04D237034D3647749B6D43C42EBC0D0DE8A2F9F65</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 = F37BDA2D8FFC21837991270CD09B7E3109FE3B75F3322C1E8C38EE8B236CB8E4EB6D29F9BCB3EAC06BDD6C8FDD565B39C8ADD0ED8D13BC05FA4A5230A8F0DCE405448805AE408B4DC8411A11F38F65D3B8681711ABB03A4BCC3D448656E1FEBDF0261A1BA088E94E979ACA41B57D6457F30D4692D70FF2FB550D911893A1290029581E03A956E58D5935EFCABD47C3F592D253767712FA499E988D0B3904DAA11F519529F3C43EEC681777DA3C549DC559FBB1952254D6C7B9ECDBB03000FB67E55D15CA04E637C09B559C408D80D99486011E4003CC854AAF2CF11D831D0201B7EEBD7B672F82C98FC5B1B98D1A83A35C0517566CA9C3A4FA143B7FB2DD96B42D05D577C61BA7832A4B8EC1C33F5FFB14A24D00E73816B6B2BFC75C367DC4B3096D40AC670D26FDA5DFDC89766C7A87A03E946E776575F4F27F8902A069D8998AD54D9F3FDC416EE13F279EA6EFBE19</code></pre>
<pre><code>encrypted_data = F37D452DF1ED77E24CD55A1D43122CB1D2380E1224C0C571466B6E1C821B6563CBA16395A76E3A8BC224ACE1B477B628E8FAC521EE25A78A032565A6D265B4827DDF7A02F17DB3376C3645B435F86325817163AA5BD462E31BF572F01C9527C0EFD64BCEE3587BD9E678BC3F22934BDAFA2149ABA95BA73E69DD02102B4E5803EB40DD5BF56869B8B9D816550E15B18548D0D212A7B6C79FAB555C108D21BB8A0F0612E3D7229821BCF806E1AE2C705A2E3AF63703D43E63D025C6B3F59A6B95C6BB8DA22AFFC6BB46D5B2FE0399763FC36DF2D985163A5398A9F7AFD195DFA40C2026F02803AA2109A988BA22E53683D4089CF281574E51249052D79DBA4EDCC0C61879F8DFBF3AE1D8617D4C8EBDD7A94F80CBCAFE7805BA0A3E7B58D50FC6A1A0C940B5277F1757726BA32A0D536299A3117FD03DD2124D714CA8B267A36BAE745796CB8ED66151BD85EB022D508B</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 18 C8 08 00 EE 0C 94 66
0010 | 78 01 00 00 1F 5F 04 F5 97 54 B5 97 0F EC 0D 63
0020 | 16 2C 80 52 33 C8 E5 18 8A C0 CE 2C D5 BD D5 93
0030 | 86 26 E2 71 F7 E5 65 0E FE 50 01 00 F3 7B DA 2D
0040 | 8F FC 21 83 79 91 27 0C D0 9B 7E 31 09 FE 3B 75
0050 | F3 32 2C 1E 8C 38 EE 8B 23 6C B8 E4 EB 6D 29 F9
0060 | BC B3 EA C0 6B DD 6C 8F DD 56 5B 39 C8 AD D0 ED
0070 | 8D 13 BC 05 FA 4A 52 30 A8 F0 DC E4 05 44 88 05
0080 | AE 40 8B 4D C8 41 1A 11 F3 8F 65 D3 B8 68 17 11
0090 | AB B0 3A 4B CC 3D 44 86 56 E1 FE BD F0 26 1A 1B
00A0 | A0 88 E9 4E 97 9A CA 41 B5 7D 64 57 F3 0D 46 92
00B0 | D7 0F F2 FB 55 0D 91 18 93 A1 29 00 29 58 1E 03
00C0 | A9 56 E5 8D 59 35 EF CA BD 47 C3 F5 92 D2 53 76
00D0 | 77 12 FA 49 9E 98 8D 0B 39 04 DA A1 1F 51 95 29
00E0 | F3 C4 3E EC 68 17 77 DA 3C 54 9D C5 59 FB B1 95
00F0 | 22 54 D6 C7 B9 EC DB B0 30 00 FB 67 E5 5D 15 CA
0100 | 04 E6 37 C0 9B 55 9C 40 8D 80 D9 94 86 01 1E 40
0110 | 03 CC 85 4A AF 2C F1 1D 83 1D 02 01 B7 EE BD 7B
0120 | 67 2F 82 C9 8F C5 B1 B9 8D 1A 83 A3 5C 05 17 56
0130 | 6C A9 C3 A4 FA 14 3B 7F B2 DD 96 B4 2D 05 D5 77
0140 | C6 1B A7 83 2A 4B 8E C1 C3 3F 5F FB 14 A2 4D 00
0150 | E7 38 16 B6 B2 BF C7 5C 36 7D C4 B3 09 6D 40 AC
0160 | 67 0D 26 FD A5 DF DC 89 76 6C 7A 87 A0 3E 94 6E
0170 | 77 65 75 F4 F2 7F 89 02 A0 69 D8 99 8A D5 4D 9F
0180 | 3F DC 41 6E E1 3F 27 9E A6 EF BE 19</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 2C 03 02 00 59 AD 96 66
0010 | 78 01 00 00 1F 5F 04 F5 17 50 E8 58 D3 21 1A F9
0020 | 97 FF 63 38 14 87 00 9E 0B ED 9E E8 16 1D 54 6C
0030 | 7E 8F 19 68 58 00 BF 8C FE 50 01 00 F3 7D 45 2D
0040 | F1 ED 77 E2 4C D5 5A 1D 43 12 2C B1 D2 38 0E 12
0050 | 24 C0 C5 71 46 6B 6E 1C 82 1B 65 63 CB A1 63 95
0060 | A7 6E 3A 8B C2 24 AC E1 B4 77 B6 28 E8 FA C5 21
0070 | EE 25 A7 8A 03 25 65 A6 D2 65 B4 82 7D DF 7A 02
0080 | F1 7D B3 37 6C 36 45 B4 35 F8 63 25 81 71 63 AA
0090 | 5B D4 62 E3 1B F5 72 F0 1C 95 27 C0 EF D6 4B CE
00A0 | E3 58 7B D9 E6 78 BC 3F 22 93 4B DA FA 21 49 AB
00B0 | A9 5B A7 3E 69 DD 02 10 2B 4E 58 03 EB 40 DD 5B
00C0 | F5 68 69 B8 B9 D8 16 55 0E 15 B1 85 48 D0 D2 12
00D0 | A7 B6 C7 9F AB 55 5C 10 8D 21 BB 8A 0F 06 12 E3
00E0 | D7 22 98 21 BC F8 06 E1 AE 2C 70 5A 2E 3A F6 37
00F0 | 03 D4 3E 63 D0 25 C6 B3 F5 9A 6B 95 C6 BB 8D A2
0100 | 2A FF C6 BB 46 D5 B2 FE 03 99 76 3F C3 6D F2 D9
0110 | 85 16 3A 53 98 A9 F7 AF D1 95 DF A4 0C 20 26 F0
0120 | 28 03 AA 21 09 A9 88 BA 22 E5 36 83 D4 08 9C F2
0130 | 81 57 4E 51 24 90 52 D7 9D BA 4E DC C0 C6 18 79
0140 | F8 DF BF 3A E1 D8 61 7D 4C 8E BD D7 A9 4F 80 CB
0150 | CA FE 78 05 BA 0A 3E 7B 58 D5 0F C6 A1 A0 C9 40
0160 | B5 27 7F 17 57 72 6B A3 2A 0D 53 62 99 A3 11 7F
0170 | D0 3D D2 12 4D 71 4C A8 B2 67 A3 6B AE 74 57 96
0180 | CB 8E D6 61 51 BD 85 EB 02 2D 50 8B</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>18C80800EE0C9466</code></td>
<td><code>2C03020059AD9666</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>9754B5970FEC0D63162C805233C8E518</code></td>
<td><code>1750E858D3211AF997FF63381487009E</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>8AC0CE2CD5BDD5938626E271F7E5650E</code></td>
<td><code>0BED9EE8161D546C7E8F19685800BF8C</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_data</td>
<td>56, 340</td>
<td><code>FE500100F37BDA2D8FFC21837991270C</code> <code>D09B7E3109FE3B75F3322C1E8C38EE8B</code> <code>236CB8E4EB6D29F9BCB3EAC06BDD6C8F</code> <code>DD565B39C8ADD0ED8D13BC05FA4A5230</code> <code>A8F0DCE405448805AE408B4DC8411A11</code> <code>F38F65D3B8681711ABB03A4BCC3D4486</code> <code>56E1FEBDF0261A1BA088E94E979ACA41</code> <code>B57D6457F30D4692D70FF2FB550D9118</code> <code>93A1290029581E03A956E58D5935EFCA</code> <code>BD47C3F592D253767712FA499E988D0B</code> <code>3904DAA11F519529F3C43EEC681777DA</code> <code>3C549DC559FBB1952254D6C7B9ECDBB0</code> <code>3000FB67E55D15CA04E637C09B559C40</code> <code>8D80D99486011E4003CC854AAF2CF11D</code> <code>831D0201B7EEBD7B672F82C98FC5B1B9</code> <code>8D1A83A35C0517566CA9C3A4FA143B7F</code> <code>B2DD96B42D05D577C61BA7832A4B8EC1</code> <code>C33F5FFB14A24D00E73816B6B2BFC75C</code> <code>367DC4B3096D40AC670D26FDA5DFDC89</code> <code>766C7A87A03E946E776575F4F27F8902</code> <code>A069D8998AD54D9F3FDC416EE13F279E</code><br> <code>A6EFBE19</code></td>
<td><code>FE500100F37D452DF1ED77E24CD55A1D</code> <code>43122CB1D2380E1224C0C571466B6E1C</code> <code>821B6563CBA16395A76E3A8BC224ACE1</code> <code>B477B628E8FAC521EE25A78A032565A6</code> <code>D265B4827DDF7A02F17DB3376C3645B4</code> <code>35F86325817163AA5BD462E31BF572F0</code> <code>1C9527C0EFD64BCEE3587BD9E678BC3F</code> <code>22934BDAFA2149ABA95BA73E69DD0210</code> <code>2B4E5803EB40DD5BF56869B8B9D81655</code> <code>0E15B18548D0D212A7B6C79FAB555C10</code> <code>8D21BB8A0F0612E3D7229821BCF806E1</code> <code>AE2C705A2E3AF63703D43E63D025C6B3</code> <code>F59A6B95C6BB8DA22AFFC6BB46D5B2FE</code> <code>0399763FC36DF2D985163A5398A9F7AF</code> <code>D195DFA40C2026F02803AA2109A988BA</code> <code>22E53683D4089CF281574E51249052D7</code> <code>9DBA4EDCC0C61879F8DFBF3AE1D8617D</code> <code>4C8EBDD7A94F80CBCAFE7805BA0A3E7B</code> <code>58D50FC6A1A0C940B5277F1757726BA3</code> <code>2A0D536299A3117FD03DD2124D714CA8</code> <code>B267A36BAE745796CB8ED66151BD85EB</code><br> <code>022D508B</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 = 86C147B995EB749E972A41376A31C68B87C834DC5216F4032985DF07A87D53762E2F424C6459256F7FAF1C8AF3B95DECAB09343911AA184F23BF4CEE54B96FAD326754F8B92BEFAAF4D6542C2B83A53847C5679EFC2F242FB20A46F8AC0E4C4687402E3E1D9D93BBFB28EB66CA7E3AA1B7181F590AD50F3A1AD3BC30C6C65F2DF1E36BA36CD34C30E83661299B6A4E9376E21E9549468969F0862B9E6BEA6032B63230619B05D2888F2C7440F6088F82659062D36FA646B8E759516D07040CAE3FE559A1157245E85A270C8507035603D18ECE79D3D6D94C7CFF9C39707F30D202E8C7801ED70FDA72C016C78288F3F0CE337BA60A7DA37A369642EC98FEC574</code></pre>
<pre><code>auth_key = 409689635BFCBFA597A18A73681CBC5B2D9E6821071CD8F372569527A1674E9B9E2D31EEB901F9CE31954A6CE7851A583448699B4DBFCFD32FA5B1A6DE933AB84F36BA14A84D6FBC1AE79AB428D5D6BCEE0C510E22E66CD250D757C73A5EDD6140A8290589B513B4ABC32A045FA8836FB34E71BADDE681DE6EAE2329018E995375FA6F08E792525B31798876553196935D9CE462BAD99DB0FB8E11F6F70E1F277A18970A5684A722085C1980E36343F8FF8DA820E0A5D6ACA0EA37B608595DF1F5D24EDF181DCFF62EA7C762910513F0B666757C964A8EF44E8190A9D56FEDEE2B8C113916B2FAFC60E0A987C713D28721254FA26A9675C9E3CD608ABD7D3FB5</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 B8 CD 7A EF 0C 94 66
0010 | A0 00 00 00 34 F7 CB 3B 97 54 B5 97 0F EC 0D 63
0020 | 16 2C 80 52 33 C8 E5 18 8A C0 CE 2C D5 BD D5 93
0030 | 86 26 E2 71 F7 E5 65 0E 98 4B F9 30 75 A4 6E 30
0040 | 02 4C EE E3 56 C7 39 C2</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 F4 1A EE 59 AD 96 66
0010 | 74 00 00 00 34 F7 CB 3B 17 50 E8 58 D3 21 1A F9
0020 | 97 FF 63 38 14 87 00 9E 0B ED 9E E8 16 1D 54 6C
0030 | 7E 8F 19 68 58 00 BF 8C ED B1 C0 6C C9 C9 79 E8
0040 | 1E 65 51 A5 1D C8 F0 90</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>01B8CD7AEF0C9466</code></td>
<td><code>01F41AEE59AD9666</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>A0000000</code> (160 in decimal)</td>
<td><code>74000000</code> (116 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>9754B5970FEC0D63162C805233C8E518</code></td>
<td><code>1750E858D3211AF997FF63381487009E</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>8AC0CE2CD5BDD5938626E271F7E5650E</code></td>
<td><code>0BED9EE8161D546C7E8F19685800BF8C</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce_hash1</td>
<td>56, 16</td>
<td><code>984BF93075A46E30024CEEE356C739C2</code></td>
<td><code>EDB1C06CC9C979E81E6551A51DC8F090</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

@ -4,10 +4,10 @@
<meta charset="utf-8">
<title>InputCheckPasswordSRP</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="description" content="Constructors for checking the validity of a 2FA SRP password">
<meta property="description" content="Constructors for checking the validity of a 2FA SRP password. See here » for more info on the 2FA authentication flow for methods that require it, before and after login.">
<meta property="og:title" content="InputCheckPasswordSRP">
<meta property="og:image" content="">
<meta property="og:description" content="Constructors for checking the validity of a 2FA SRP password">
<meta property="og:description" content="Constructors for checking the validity of a 2FA SRP password. See here » for more info on the 2FA authentication flow for methods that require it, before and after login.">
<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">
@ -42,7 +42,8 @@
<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="/schema" >TL-schema</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/type/InputCheckPasswordSRP" >InputCheckPasswordSRP</a></li></ul></div>
<h1 id="dev_page_title">InputCheckPasswordSRP</h1>
<div id="dev_page_content"><p>Constructors for checking the validity of a <a href="/api/srp">2FA SRP password</a></p>
<div id="dev_page_content"><p>Constructors for checking the validity of a <a href="/api/srp">2FA SRP password</a>.</p>
<p>See <a href="/api/srp#using-the-2fa-password">here »</a> for more info on the 2FA authentication flow for methods that require it, before and after login.</p>
<p><div class="clearfix">
<ul class="dev_layer_select slightly-pull-right nav nav-pills">
<li class="dropdown">