Update content of files

This commit is contained in:
GitHub Action 2024-11-13 18:52:01 +00:00
parent 03c4a20ecb
commit 416676b60b
13 changed files with 280 additions and 339 deletions

View file

@ -380,7 +380,15 @@ While <a href="/method/help.getConfig">help.getConfig</a> returns MTProto-specif
"ton_proxy_address": "magic.org",
"weather_search_username": "StoryWeatherBot",
"story_weather_preload": true,
"stars_gifts_enabled": true
"stars_gifts_enabled": true,
"stars_subscription_amount_max": 2500,
"stars_usd_sell_rate_x1000": 1410,
"stars_usd_withdraw_rate_x1000": 1300,
"stars_paid_reaction_amount_max": 2500,
"stargifts_message_length_max": 255,
"stargifts_blocked": false,
"stargifts_convert_period_max": 7776000,
"video_ignore_alt_documents": false
}</code></pre>
<p>The fields included in the resulting JSON object are: </p>
<h4><a class="anchor" href="#weather-search-username" id="weather-search-username" name="weather-search-username"><i class="anchor-icon"></i></a><code>weather_search_username</code></h4>
@ -714,6 +722,8 @@ A full list of these parameters can be seen in the <a href="#client-configuratio
<li><code>"PREMIUM_CHRISTMAS"</code> - Suggests the user to <a href="/api/premium#gifting-telegram-premium">gift Telegram Premium</a> subscriptions to friends for Christmas.</li>
<li><code>"PREMIUM_GRACE"</code> - Suggests the user to extend their expiring Telegram Premium subscription</li>
<li><code>"BIRTHDAY_SETUP"</code> - Suggests the user to set a <a href="/api/profile#birthday">birthday »</a>.</li>
<li><code>"STARS_SUBSCRIPTION_LOW_BALANCE"</code> - Suggests the user to extend their expiring <a href="/api/stars#subscriptions">Telegram Star subscriptions</a>.
Invoke <a href="/method/payments.getStarsSubscriptions">payments.getStarsSubscriptions</a> with the <code>missing_balance</code> flag set to get the number of expiring subscriptions and the number of required to buy Telegram Stars</li>
</ul>
</li>
</ul>

View file

@ -46,14 +46,18 @@
<p>Below you will find information on schema changes. For more details on the use of layers, see <a href="/api/invoking#layers">Invoking API methods</a>.</p>
<h3><a class="anchor" href="#layer-192" id="layer-192" name="layer-192"><i class="anchor-icon"></i></a><a href="/schema?layer=192">Layer 192</a></h3>
<p>This layer adds support for <a href="/bots/faq#how-can-i-message-all-of-my-bot-39s-subscribers-at-once">paid broadcasts</a> for bots, through the new <code>allow_paid_floodskip</code> flag.</p>
<p>This layer introduces the following new features:</p>
<ul>
<li>Support for <a href="/bots/faq#how-can-i-message-all-of-my-bot-39s-subscribers-at-once">paid broadcasts</a> for bots, through the new <code>allow_paid_floodskip</code> flag.</li>
<li><a href="/api/sponsored-messages">Ads for bots</a></li>
</ul>
<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/messages.viewSponsoredMessage">messages.viewSponsoredMessage</a> - </li>
<li>Added <a href="/method/messages.clickSponsoredMessage">messages.clickSponsoredMessage</a> - </li>
<li>Added <a href="/method/messages.reportSponsoredMessage">messages.reportSponsoredMessage</a> - </li>
<li>Added <a href="/method/messages.getSponsoredMessages">messages.getSponsoredMessages</a> - </li>
<li>Added <a href="/method/messages.viewSponsoredMessage">messages.viewSponsoredMessage</a> - Mark a specific <a href="/api/sponsored-messages">sponsored message »</a> as read</li>
<li>Added <a href="/method/messages.clickSponsoredMessage">messages.clickSponsoredMessage</a> - Informs the server that the user has either:</li>
<li>Added <a href="/method/messages.reportSponsoredMessage">messages.reportSponsoredMessage</a> - Report a <a href="/api/sponsored-messages">sponsored message »</a>, see <a href="/api/sponsored-messages#reporting-sponsored-messages">here »</a> for more info on the full flow.</li>
<li>Added <a href="/method/messages.getSponsoredMessages">messages.getSponsoredMessages</a> - Get a list of <a href="/api/sponsored-messages">sponsored messages for a peer, see here »</a> for more info.</li>
</ul>
<h5><a class="anchor" href="#changed-methods" id="changed-methods" name="changed-methods"><i class="anchor-icon"></i></a>Changed Methods</h5>
<ul>

View file

@ -61,7 +61,7 @@
---functions---
<a href='/method/stats.getBroadcastRevenueTransactions'>stats.getBroadcastRevenueTransactions</a>#70990b6d peer:<a href='/type/InputPeer'>InputPeer</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>The channel ad revenue transaction history and balance may be fetched by channel admins if the <a href="/constructor/channelFull">channelFull</a>.<code>can_view_revenue</code> flag is set and the <a href="/api/config#channel-revenue-withdrawal-enabled">channel_revenue_withdrawal_enabled field is equal to <code>true</code> »</a>. </p>
<p>The channel/bot ad revenue transaction history and balance may be fetched by channel admins if the <a href="/constructor/channelFull">channelFull</a>.<code>can_view_revenue</code>/<a href="/constructor/userFull">userFull</a>.<code>can_view_revenue</code> flag is set and the <a href="/api/config#channel-revenue-withdrawal-enabled">channel_revenue_withdrawal_enabled field is equal to <code>true</code> »</a>. </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 channel in some time frame</li>
@ -80,8 +80,8 @@
---functions---
<a href='/method/stats.getBroadcastRevenueStats'>stats.getBroadcastRevenueStats</a>#f788ee19 flags:<a href='/type/%23'>#</a> dark:flags.0?<a href='/constructor/true'>true</a> peer:<a href='/type/InputPeer'>InputPeer</a> = <a href='/type/stats.BroadcastRevenueStats'>stats.BroadcastRevenueStats</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 and the <a href="/api/config#channel-revenue-withdrawal-enabled">channel_revenue_withdrawal_enabled field is equal to <code>true</code> »</a>. </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>Channel/bot ad revenue statistics may be fetched by channel/bot admins if the <a href="/constructor/channelFull">channelFull</a>.<code>can_view_revenue</code>/<a href="/constructor/userFull">userFull</a>.<code>can_view_revenue</code> flag is set and the <a href="/api/config#channel-revenue-withdrawal-enabled">channel_revenue_withdrawal_enabled field is equal to <code>true</code> »</a> (valid both for channels and bots). </p>
<p>Use <a href="/method/stats.getBroadcastRevenueStats">stats.getBroadcastRevenueStats</a> to fetch statistics about the revenue earned from sponsored messages in a channel/bot; 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:</p>
<ul>
<li><code>top_hours_graph</code> - Ad impressions graph</li>
@ -96,8 +96,8 @@
---functions---
<a href='/method/stats.getBroadcastRevenueWithdrawalUrl'>stats.getBroadcastRevenueWithdrawalUrl</a>#9df4faad peer:<a href='/type/InputPeer'>InputPeer</a> password:<a href='/type/InputCheckPasswordSRP'>InputCheckPasswordSRP</a> = <a href='/type/stats.BroadcastRevenueWithdrawalUrl'>stats.BroadcastRevenueWithdrawalUrl</a>;</code></pre>
<p>To withdraw a channel's ad revenue, 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>Only the channel owner can invoke this method, and only if the <a href="/api/config#channel-revenue-withdrawal-enabled">channel_revenue_withdrawal_enabled field is equal to <code>true</code> »</a>. </p>
<p>To withdraw a channel/bot's ad revenue, 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>Only the channel/bot owner can invoke this method, and only if the <a href="/api/config#channel-revenue-withdrawal-enabled">channel_revenue_withdrawal_enabled field is equal to <code>true</code> »</a> (valid both for channels and bots). </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>
<h4><a class="anchor" href="#disable-ads-on-the-channel" id="disable-ads-on-the-channel" name="disable-ads-on-the-channel"><i class="anchor-icon"></i></a>Disable ads on the channel</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> paid_media_allowed:flags2.14?<a href='/constructor/true'>true</a> can_view_stars_revenue:flags2.15?<a href='/constructor/true'>true</a> paid_reactions_available:flags2.16?<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>;

View file

@ -150,7 +150,7 @@
<tr>
<td><strong>can_view_revenue</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags2</a>.9?<a href="/constructor/true">true</a></td>
<td> </td>
<td>If set, this user can view <a href="/api/revenue#revenue-statistics">ad revenue statistics »</a> for this bot.</td>
</tr>
<tr>
<td><strong>id</strong></td>
@ -323,6 +323,8 @@ The exact read date of messages might still be unavailable for other reasons, se
To set <a href="/constructor/userFull">userFull</a>.<code>read_dates_private</code> for ourselves invoke <a href="/method/account.setGlobalPrivacySettings">account.setGlobalPrivacySettings</a>, setting the <code>settings.hide_read_marks</code> flag.</p>
<h4><a class="anchor" href="#business" id="business" name="business"><i class="anchor-icon"></i></a><a href="/api/business">Business</a></h4>
<p>Users can turn their Telegram account into a business account, gaining access to business features such as opening hours, location, quick replies, automated messages, custom start pages, chatbot support, and more.</p>
<h4><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></h4>
<p>Telegram has one of the most generous reward systems in the history of social media. Telegram channel owners can now receive 50% of the revenue from ads displayed in their channels. This page describes the methods used to withdraw channel ad revenue, as well as view detailed revenue stats.</p>
<h4><a class="anchor" href="#pinned-messages" id="pinned-messages" name="pinned-messages"><i class="anchor-icon"></i></a><a href="/api/pin">Pinned messages</a></h4>
<p>Telegram allows pinning multiple messages on top of a specific chat.</p>
<h4><a class="anchor" href="#folders" id="folders" name="folders"><i class="anchor-icon"></i></a><a href="/api/folders">Folders</a></h4>

View file

@ -4,32 +4,10 @@
<meta charset="utf-8">
<title>messages.clickSponsoredMessage</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="description" content="Parameters
Name
Type
Description
flags
#
Flags, see TL conditional fields
media
flags.0?true
 
fullscreen
flags.1?true…">
<meta property="description" content="Informs the server that the user has either: - Clicked on a link in the sponsored message - Has opened a sponsored chat or a sponsored website via the associated button - Has opened the sponsored chat via the sponsored message name, the sponsored message photo, or a mention in the sponsored message">
<meta property="og:title" content="messages.clickSponsoredMessage">
<meta property="og:image" content="">
<meta property="og:description" content="Parameters
Name
Type
Description
flags
#
Flags, see TL conditional fields
media
flags.0?true
 
fullscreen
flags.1?true…">
<meta property="og:description" content="Informs the server that the user has either: - Clicked on a link in the sponsored message - Has opened a sponsored chat or a sponsored website via the associated button - Has opened the sponsored chat via the sponsored message name, the sponsored message photo, or a mention in the sponsored message">
<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">
@ -64,7 +42,13 @@ flags.1?true…">
<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/messages.clickSponsoredMessage" >messages.clickSponsoredMessage</a></li></ul></div>
<h1 id="dev_page_title">messages.clickSponsoredMessage</h1>
<div id="dev_page_content"><p><div class="clearfix">
<div id="dev_page_content"><p>Informs the server that the user has either:</p>
<ul>
<li>Clicked on a link in the <a href="/api/sponsored-messages">sponsored message</a></li>
<li>Has opened a sponsored chat or a sponsored website via the associated button</li>
<li>Has opened the sponsored chat via the sponsored message name, the sponsored message photo, or a mention in the sponsored message</li>
</ul>
<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 192 <b class="caret"></b></a>
@ -108,18 +92,20 @@ flags.1?true…">
<tr>
<td><strong>peer</strong></td>
<td style="text-align: center;"><a href="/type/InputPeer">InputPeer</a></td>
<td> </td>
<td>The channel/bot where the ad is located</td>
</tr>
<tr>
<td><strong>random_id</strong></td>
<td style="text-align: center;"><a href="/type/bytes">bytes</a></td>
<td> </td>
<td>The ad's unique ID.</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>
<h3><a class="anchor" href="#bots-can-use-this-method" id="bots-can-use-this-method" name="bots-can-use-this-method"><i class="anchor-icon"></i></a>Bots can use this method</h3></div>
<h3><a class="anchor" href="#bots-can-use-this-method" id="bots-can-use-this-method" name="bots-can-use-this-method"><i class="anchor-icon"></i></a>Bots can use this method</h3>
<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="#sponsored-messages" id="sponsored-messages" name="sponsored-messages"><i class="anchor-icon"></i></a><a href="/api/sponsored-messages">Sponsored messages</a></h4></div>
</div>

View file

@ -4,28 +4,10 @@
<meta charset="utf-8">
<title>messages.getSponsoredMessages</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="description" content="Parameters
Name
Type
Description
peer
InputPeer
 
Result
messages.SponsoredMessages
Bots can use this method">
<meta property="description" content="Get a list of sponsored messages for a peer, see here » for more info.">
<meta property="og:title" content="messages.getSponsoredMessages">
<meta property="og:image" content="">
<meta property="og:description" content="Parameters
Name
Type
Description
peer
InputPeer
 
Result
messages.SponsoredMessages
Bots can use this method">
<meta property="og:description" content="Get a list of sponsored messages for a peer, 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">
@ -60,7 +42,8 @@ Bots can use this method">
<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/messages.getSponsoredMessages" >messages.getSponsoredMessages</a></li></ul></div>
<h1 id="dev_page_title">messages.getSponsoredMessages</h1>
<div id="dev_page_content"><p><div class="clearfix">
<div id="dev_page_content"><p>Get a list of <a href="/api/sponsored-messages">sponsored messages for a peer, see 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 192 <b class="caret"></b></a>
@ -89,13 +72,15 @@ Bots can use this method">
<tr>
<td><strong>peer</strong></td>
<td style="text-align: center;"><a href="/type/InputPeer">InputPeer</a></td>
<td> </td>
<td>The currently open channel/bot.</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/messages.SponsoredMessages">messages.SponsoredMessages</a></p>
<h3><a class="anchor" href="#bots-can-use-this-method" id="bots-can-use-this-method" name="bots-can-use-this-method"><i class="anchor-icon"></i></a>Bots can use this method</h3></div>
<h3><a class="anchor" href="#bots-can-use-this-method" id="bots-can-use-this-method" name="bots-can-use-this-method"><i class="anchor-icon"></i></a>Bots can use this method</h3>
<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="#sponsored-messages" id="sponsored-messages" name="sponsored-messages"><i class="anchor-icon"></i></a><a href="/api/sponsored-messages">Sponsored messages</a></h4></div>
</div>

View file

@ -4,38 +4,10 @@
<meta charset="utf-8">
<title>messages.reportSponsoredMessage</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="description" content="Parameters
Name
Type
Description
peer
InputPeer
 
random_id
bytes
 
option
bytes
 
Result
channels.SponsoredMessageReportResult…">
<meta property="description" content="Report a sponsored message », see here » for more info on the full flow.">
<meta property="og:title" content="messages.reportSponsoredMessage">
<meta property="og:image" content="">
<meta property="og:description" content="Parameters
Name
Type
Description
peer
InputPeer
 
random_id
bytes
 
option
bytes
 
Result
channels.SponsoredMessageReportResult…">
<meta property="og:description" content="Report a sponsored message », see here » for more info on the full flow.">
<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">
@ -70,7 +42,8 @@ channels.SponsoredMessageReportResult…">
<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/messages.reportSponsoredMessage" >messages.reportSponsoredMessage</a></li></ul></div>
<h1 id="dev_page_title">messages.reportSponsoredMessage</h1>
<div id="dev_page_content"><p><div class="clearfix">
<div id="dev_page_content"><p>Report a <a href="/api/sponsored-messages">sponsored message »</a>, see <a href="/api/sponsored-messages#reporting-sponsored-messages">here »</a> for more info on the full flow.</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 192 <b class="caret"></b></a>
@ -100,23 +73,25 @@ channels.SponsoredMessageReportResult…">
<tr>
<td><strong>peer</strong></td>
<td style="text-align: center;"><a href="/type/InputPeer">InputPeer</a></td>
<td> </td>
<td>The channel/bot where the ad is located</td>
</tr>
<tr>
<td><strong>random_id</strong></td>
<td style="text-align: center;"><a href="/type/bytes">bytes</a></td>
<td> </td>
<td>The ad's unique ID.</td>
</tr>
<tr>
<td><strong>option</strong></td>
<td style="text-align: center;"><a href="/type/bytes">bytes</a></td>
<td> </td>
<td>Chosen report option, initially an empty string, see <a href="/api/sponsored-messages#reporting-sponsored-messages">here »</a> for more info on the full flow.</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/channels.SponsoredMessageReportResult">channels.SponsoredMessageReportResult</a></p>
<h3><a class="anchor" href="#bots-can-use-this-method" id="bots-can-use-this-method" name="bots-can-use-this-method"><i class="anchor-icon"></i></a>Bots can use this method</h3></div>
<h3><a class="anchor" href="#bots-can-use-this-method" id="bots-can-use-this-method" name="bots-can-use-this-method"><i class="anchor-icon"></i></a>Bots can use this method</h3>
<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="#sponsored-messages" id="sponsored-messages" name="sponsored-messages"><i class="anchor-icon"></i></a><a href="/api/sponsored-messages">Sponsored messages</a></h4></div>
</div>

View file

@ -4,34 +4,10 @@
<meta charset="utf-8">
<title>messages.viewSponsoredMessage</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="description" content="Parameters
Name
Type
Description
peer
InputPeer
 
random_id
bytes
 
Result
Bool
Bots can use this method">
<meta property="description" content="Mark a specific sponsored message » as read">
<meta property="og:title" content="messages.viewSponsoredMessage">
<meta property="og:image" content="">
<meta property="og:description" content="Parameters
Name
Type
Description
peer
InputPeer
 
random_id
bytes
 
Result
Bool
Bots can use this method">
<meta property="og:description" content="Mark a specific sponsored message » as read">
<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">
@ -66,7 +42,8 @@ Bots can use this method">
<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/messages.viewSponsoredMessage" >messages.viewSponsoredMessage</a></li></ul></div>
<h1 id="dev_page_title">messages.viewSponsoredMessage</h1>
<div id="dev_page_content"><p><div class="clearfix">
<div id="dev_page_content"><p>Mark a specific <a href="/api/sponsored-messages">sponsored message »</a> as read</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 192 <b class="caret"></b></a>
@ -95,18 +72,20 @@ Bots can use this method">
<tr>
<td><strong>peer</strong></td>
<td style="text-align: center;"><a href="/type/InputPeer">InputPeer</a></td>
<td> </td>
<td>The channel/bot where the ad is located</td>
</tr>
<tr>
<td><strong>random_id</strong></td>
<td style="text-align: center;"><a href="/type/bytes">bytes</a></td>
<td> </td>
<td>The ad's unique ID.</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>
<h3><a class="anchor" href="#bots-can-use-this-method" id="bots-can-use-this-method" name="bots-can-use-this-method"><i class="anchor-icon"></i></a>Bots can use this method</h3></div>
<h3><a class="anchor" href="#bots-can-use-this-method" id="bots-can-use-this-method" name="bots-can-use-this-method"><i class="anchor-icon"></i></a>Bots can use this method</h3>
<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="#sponsored-messages" id="sponsored-messages" name="sponsored-messages"><i class="anchor-icon"></i></a><a href="/api/sponsored-messages">Sponsored messages</a></h4></div>
</div>

View file

@ -3742,19 +3742,19 @@ Look for updates of telegram&#39;s terms of service…">
</tr>
<tr>
<td><a href="/method/messages.viewSponsoredMessage">messages.viewSponsoredMessage</a></td>
<td> </td>
<td>Mark a specific <a href="/api/sponsored-messages">sponsored message »</a> as read</td>
</tr>
<tr>
<td><a href="/method/messages.clickSponsoredMessage">messages.clickSponsoredMessage</a></td>
<td> </td>
<td>Informs the server that the user has either:<br><br>- Clicked on a link in the <a href="/api/sponsored-messages">sponsored message</a><br>- Has opened a sponsored chat or a sponsored website via the associated button<br>- Has opened the sponsored chat via the sponsored message name, the sponsored message photo, or a mention in the sponsored message</td>
</tr>
<tr>
<td><a href="/method/messages.reportSponsoredMessage">messages.reportSponsoredMessage</a></td>
<td> </td>
<td>Report a <a href="/api/sponsored-messages">sponsored message »</a>, see <a href="/api/sponsored-messages#reporting-sponsored-messages">here »</a> for more info on the full flow.</td>
</tr>
<tr>
<td><a href="/method/messages.getSponsoredMessages">messages.getSponsoredMessages</a></td>
<td> </td>
<td>Get a list of <a href="/api/sponsored-messages">sponsored messages for a peer, see here »</a> for more info.</td>
</tr>
</tbody>
</table></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 0C 61 06 00 E2 88 33 67
0010 | 14 00 00 00 F1 8E 7E BE 28 72 1A 8E C4 CD 99 F8
0020 | A9 B9 5B DB 5A 5F D8 30</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 5C E8 04 00 34 F4 34 67
0010 | 14 00 00 00 F1 8E 7E BE DB D8 C6 5A 8B 8D D0 75
0020 | E7 F9 55 69 3B 65 DD 5D</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>0C610600E2883367</code></td>
<td><code>5CE8040034F43467</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>28721A8EC4CD99F8A9B95BDB5A5FD830</code></td>
<td><code>DBD8C65A8B8DD075E7F955693B65DD5D</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 44 DB B9 E2 88 33 67
0010 | 50 00 00 00 63 24 16 05 28 72 1A 8E C4 CD 99 F8
0020 | A9 B9 5B DB 5A 5F D8 30 71 7F 48 CF 46 34 E2 07
0030 | D3 21 B7 A6 A0 50 39 82 08 13 9E 3B B6 1E B5 BA
0040 | 8D 00 00 00 15 C4 B5 1C 03 00 00 00 85 FD 64 DE
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 14 47 81 34 F4 34 67
0010 | 50 00 00 00 63 24 16 05 DB D8 C6 5A 8B 8D D0 75
0020 | E7 F9 55 69 3B 65 DD 5D 86 3C 64 43 9D 30 AC 3C
0030 | 57 17 3B BC 88 FF 8C C2 08 23 D5 D8 BD CB F4 9F
0040 | 53 00 00 00 15 C4 B5 1C 03 00 00 00 85 FD 64 DE
0050 | 85 1D 9D D0 A5 B7 F7 09 35 5F C3 0B 21 6B E8 6C
0060 | 02 2B B4 C3</code></pre>
<p>Payload (de)serialization:</p>
@ -132,7 +132,7 @@
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>0144DBB9E2883367</code></td>
<td><code>0114478134F43467</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>
@ -150,19 +150,19 @@
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>28721A8EC4CD99F8A9B95BDB5A5FD830</code></td>
<td><code>DBD8C65A8B8DD075E7F955693B65DD5D</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>717F48CF4634E207D321B7A6A0503982</code></td>
<td><code>863C64439D30AC3C57173BBC88FF8CC2</code></td>
<td>Server-generated random number</td>
</tr>
<tr>
<td>pq</td>
<td>56, 12</td>
<td><code>08139E3BB61EB5BA8D000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1413632986426227341</td>
<td><code>0823D5D8BDCBF49F53000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2582208271049072467</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 = 1413632986426227341</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>1413632986426227341 = 1168940321 * 1209328621</code></p>
<pre><code>p = 1168940321
q = 1209328621</code></pre>
<pre><code>pq = 2582208271049072467</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>2582208271049072467 = 1411293217 * 1829675251</code></p>
<pre><code>p = 1411293217
q = 1829675251</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 9E 3B B6 1E B5 BA 8D 00 00 00
0010 | 04 45 AC 9D 21 00 00 00 04 48 14 E3 ED 00 00 00
0020 | 28 72 1A 8E C4 CD 99 F8 A9 B9 5B DB 5A 5F D8 30
0030 | 71 7F 48 CF 46 34 E2 07 D3 21 B7 A6 A0 50 39 82
0040 | 56 84 9E 7F 80 A3 5D DD 7E EC A0 AC 29 69 D1 7D
0050 | 53 AB CA C9 EA A1 4E 7D 02 FB 16 CC E5 17 18 9F
<pre><code>0000 | 95 5F F5 A9 08 23 D5 D8 BD CB F4 9F 53 00 00 00
0010 | 04 54 1E A0 21 00 00 00 04 6D 0E A0 F3 00 00 00
0020 | DB D8 C6 5A 8B 8D D0 75 E7 F9 55 69 3B 65 DD 5D
0030 | 86 3C 64 43 9D 30 AC 3C 57 17 3B BC 88 FF 8C C2
0040 | CD 8C AD BC C8 36 4A 72 DA 70 A3 DA BB 76 16 F3
0050 | 9A 4B E0 F5 6F 9B E1 0A 24 FB 7D 46 30 E0 C8 FE
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 = 1209328621</code></pre>
<tr>
<td>pq</td>
<td>4, 12</td>
<td><code>08139E3BB61EB5BA8D000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1413632986426227341</td>
<td><code>0823D5D8BDCBF49F53000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2582208271049072467</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>0445AC9D21000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1168940321</td>
<td><code>04541EA021000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1411293217</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>044814E3ED000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1209328621</td>
<td><code>046D0EA0F3000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1829675251</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>28721A8EC4CD99F8A9B95BDB5A5FD830</code></td>
<td><code>DBD8C65A8B8DD075E7F955693B65DD5D</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>48, 16</td>
<td><code>717F48CF4634E207D321B7A6A0503982</code></td>
<td><code>863C64439D30AC3C57173BBC88FF8CC2</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce</td>
<td>64, 32</td>
<td><code>56849E7F80A35DDD7EECA0AC2969D17D</code> <code>53ABCAC9EAA14E7D02FB16CCE517189F</code></td>
<td><code>CD8CADBCC8364A72DA70A3DABB7616F3</code> <code>9A4BE0F56F9BE10A24FB7D4630E0C8FE</code></td>
<td>Client-generated random number</td>
</tr>
<tr>
@ -291,39 +291,39 @@ q = 1209328621</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 = 955FF5A908139E3BB61EB5BA8D0000000445AC9D21000000044814E3ED00000028721A8EC4CD99F8A9B95BDB5A5FD830717F48CF4634E207D321B7A6A050398256849E7F80A35DDD7EECA0AC2969D17D53ABCAC9EAA14E7D02FB16CCE517189F02000000
random_padding_bytes = EE2FE5580491683FA67D4DD722AA8385F57F20D61CB0196FB6388C643D4FD818976EC97FD085798FCC165B07096ED3868B393B61F798CB300A96725D71574DBE8DF845C6C2CACBA0F2B8A1920DE3973FE4036831811B1248A14BE97F</code></pre>
<pre><code>data = 955FF5A90823D5D8BDCBF49F5300000004541EA021000000046D0EA0F3000000DBD8C65A8B8DD075E7F955693B65DD5D863C64439D30AC3C57173BBC88FF8CC2CD8CADBCC8364A72DA70A3DABB7616F39A4BE0F56F9BE10A24FB7D4630E0C8FE02000000
random_padding_bytes = D1B1051F06A57A7CE3F906D2A94B4FE3B2DD70937BA3F4D0A6CD7E5E777D6B01E055453664A6735F6907CD78D5C6A018BE453BF3905FB9076DCB0A9E2AE4F7DFEA0EFFBF789399381730454F7EF168CC21FD81FC07E85D64839CE962</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 = 1B49394C7AE3D72AB7D6A53CF1AF23DF667AC7D9ADC11AB1CC9CA06F7688F870A1C6896482E6082AEC7AC5DFF08D83D4A03612E9478C9157DD223DCE03FA9C1E04797F41F2213C254608DA94B3B2693075B81FA72BEB40D607EED5303C813AED46E84D11F73769D74ED1D345A04CF9F1485A3330992E373CC51EA01E309CCD6BD3CF0445DA2698AF3205E040E0267E5BEC220B08E94DA59FD456E521D21B9296E5B150E61CE52C0CD25075DC19C7DFE0598C05FD515F0F5E834C778F28E353A84E917241D014D68FB65DA21FEBD75D7D8F27274B6784DAAEEECF1AB781D314B736B3803FA198D893D25B8C6EE1FBB143B7680D053B8A43D3D01F16E6567D4849</code></pre>
<pre><code>encrypted_data = 6A9F447F40EA940FF774BE57AFC14795417131A8AA8F57122E79C827A2EA708DA73671885DFD8F0662409E87E8BEC813D8E8D080C93129AE0AFC3D00707A176CCAB7E8D02CBC57B8D6A43A1AC96B32605D934844016A90C641F8E96772C94A124AC43B81F73027C9CA9180FF960094CD4F498DA2EA6139FDCB53EB70B0ED4893D30B841CA8A2B4D4CB5AB7E8A7CF2FFC423E0DCC60B29143FD44DFACAE415D18EEC924A0E9F3DF12FAFB4668A71245E82BA53786CA191A26B468FA3EC395B4761BA3ACC92A1472F4949EE1FF5C31E56AD081A70393260438762A6285E142250673D9868452D370C1F48DAAC376904C05A0D5BE32C0CE6CA2717BC28704F69651</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 10 61 06 00 E2 88 33 67
0010 | 40 01 00 00 BE E4 12 D7 28 72 1A 8E C4 CD 99 F8
0020 | A9 B9 5B DB 5A 5F D8 30 71 7F 48 CF 46 34 E2 07
0030 | D3 21 B7 A6 A0 50 39 82 04 45 AC 9D 21 00 00 00
0040 | 04 48 14 E3 ED 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 1B 49 39 4C 7A E3 D7 2A B7 D6 A5 3C
0060 | F1 AF 23 DF 66 7A C7 D9 AD C1 1A B1 CC 9C A0 6F
0070 | 76 88 F8 70 A1 C6 89 64 82 E6 08 2A EC 7A C5 DF
0080 | F0 8D 83 D4 A0 36 12 E9 47 8C 91 57 DD 22 3D CE
0090 | 03 FA 9C 1E 04 79 7F 41 F2 21 3C 25 46 08 DA 94
00A0 | B3 B2 69 30 75 B8 1F A7 2B EB 40 D6 07 EE D5 30
00B0 | 3C 81 3A ED 46 E8 4D 11 F7 37 69 D7 4E D1 D3 45
00C0 | A0 4C F9 F1 48 5A 33 30 99 2E 37 3C C5 1E A0 1E
00D0 | 30 9C CD 6B D3 CF 04 45 DA 26 98 AF 32 05 E0 40
00E0 | E0 26 7E 5B EC 22 0B 08 E9 4D A5 9F D4 56 E5 21
00F0 | D2 1B 92 96 E5 B1 50 E6 1C E5 2C 0C D2 50 75 DC
0100 | 19 C7 DF E0 59 8C 05 FD 51 5F 0F 5E 83 4C 77 8F
0110 | 28 E3 53 A8 4E 91 72 41 D0 14 D6 8F B6 5D A2 1F
0120 | EB D7 5D 7D 8F 27 27 4B 67 84 DA AE EE CF 1A B7
0130 | 81 D3 14 B7 36 B3 80 3F A1 98 D8 93 D2 5B 8C 6E
0140 | E1 FB B1 43 B7 68 0D 05 3B 8A 43 D3 D0 1F 16 E6
0150 | 56 7D 48 49</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 60 E8 04 00 34 F4 34 67
0010 | 40 01 00 00 BE E4 12 D7 DB D8 C6 5A 8B 8D D0 75
0020 | E7 F9 55 69 3B 65 DD 5D 86 3C 64 43 9D 30 AC 3C
0030 | 57 17 3B BC 88 FF 8C C2 04 54 1E A0 21 00 00 00
0040 | 04 6D 0E A0 F3 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 6A 9F 44 7F 40 EA 94 0F F7 74 BE 57
0060 | AF C1 47 95 41 71 31 A8 AA 8F 57 12 2E 79 C8 27
0070 | A2 EA 70 8D A7 36 71 88 5D FD 8F 06 62 40 9E 87
0080 | E8 BE C8 13 D8 E8 D0 80 C9 31 29 AE 0A FC 3D 00
0090 | 70 7A 17 6C CA B7 E8 D0 2C BC 57 B8 D6 A4 3A 1A
00A0 | C9 6B 32 60 5D 93 48 44 01 6A 90 C6 41 F8 E9 67
00B0 | 72 C9 4A 12 4A C4 3B 81 F7 30 27 C9 CA 91 80 FF
00C0 | 96 00 94 CD 4F 49 8D A2 EA 61 39 FD CB 53 EB 70
00D0 | B0 ED 48 93 D3 0B 84 1C A8 A2 B4 D4 CB 5A B7 E8
00E0 | A7 CF 2F FC 42 3E 0D CC 60 B2 91 43 FD 44 DF AC
00F0 | AE 41 5D 18 EE C9 24 A0 E9 F3 DF 12 FA FB 46 68
0100 | A7 12 45 E8 2B A5 37 86 CA 19 1A 26 B4 68 FA 3E
0110 | C3 95 B4 76 1B A3 AC C9 2A 14 72 F4 94 9E E1 FF
0120 | 5C 31 E5 6A D0 81 A7 03 93 26 04 38 76 2A 62 85
0130 | E1 42 25 06 73 D9 86 84 52 D3 70 C1 F4 8D AA C3
0140 | 76 90 4C 05 A0 D5 BE 32 C0 CE 6C A2 71 7B C2 87
0150 | 04 F6 96 51</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 = EE2FE5580491683FA67D4DD722AA8385F57F20D61CB0196FB6388C643
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>10610600E2883367</code></td>
<td><code>60E8040034F43467</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 = EE2FE5580491683FA67D4DD722AA8385F57F20D61CB0196FB6388C643
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>28721A8EC4CD99F8A9B95BDB5A5FD830</code></td>
<td><code>DBD8C65A8B8DD075E7F955693B65DD5D</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>717F48CF4634E207D321B7A6A0503982</code></td>
<td><code>863C64439D30AC3C57173BBC88FF8CC2</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>p</td>
<td>56, 8</td>
<td><code>0445AC9D21000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1168940321</td>
<td><code>04541EA021000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1411293217</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>044814E3ED000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1209328621</td>
<td><code>046D0EA0F3000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1829675251</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 = EE2FE5580491683FA67D4DD722AA8385F57F20D61CB0196FB6388C643
<tr>
<td>encrypted_data</td>
<td>80, 260</td>
<td><code>FE0001001B49394C7AE3D72AB7D6A53C</code> <code>F1AF23DF667AC7D9ADC11AB1CC9CA06F</code> <code>7688F870A1C6896482E6082AEC7AC5DF</code> <code>F08D83D4A03612E9478C9157DD223DCE</code> <code>03FA9C1E04797F41F2213C254608DA94</code> <code>B3B2693075B81FA72BEB40D607EED530</code> <code>3C813AED46E84D11F73769D74ED1D345</code> <code>A04CF9F1485A3330992E373CC51EA01E</code> <code>309CCD6BD3CF0445DA2698AF3205E040</code> <code>E0267E5BEC220B08E94DA59FD456E521</code> <code>D21B9296E5B150E61CE52C0CD25075DC</code> <code>19C7DFE0598C05FD515F0F5E834C778F</code> <code>28E353A84E917241D014D68FB65DA21F</code> <code>EBD75D7D8F27274B6784DAAEEECF1AB7</code> <code>81D314B736B3803FA198D893D25B8C6E</code> <code>E1FBB143B7680D053B8A43D3D01F16E6</code><br> <code>567D4849</code></td>
<td><code>FE0001006A9F447F40EA940FF774BE57</code> <code>AFC14795417131A8AA8F57122E79C827</code> <code>A2EA708DA73671885DFD8F0662409E87</code> <code>E8BEC813D8E8D080C93129AE0AFC3D00</code> <code>707A176CCAB7E8D02CBC57B8D6A43A1A</code> <code>C96B32605D934844016A90C641F8E967</code> <code>72C94A124AC43B81F73027C9CA9180FF</code> <code>960094CD4F498DA2EA6139FDCB53EB70</code> <code>B0ED4893D30B841CA8A2B4D4CB5AB7E8</code> <code>A7CF2FFC423E0DCC60B29143FD44DFAC</code> <code>AE415D18EEC924A0E9F3DF12FAFB4668</code> <code>A71245E82BA53786CA191A26B468FA3E</code> <code>C395B4761BA3ACC92A1472F4949EE1FF</code> <code>5C31E56AD081A70393260438762A6285</code> <code>E142250673D9868452D370C1F48DAAC3</code> <code>76904C05A0D5BE32C0CE6CA2717BC287</code><br> <code>04F69651</code></td>
<td>Value generated above</td>
</tr>
</tbody>
@ -402,47 +402,47 @@ random_padding_bytes = EE2FE5580491683FA67D4DD722AA8385F57F20D61CB0196FB6388C643
<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 1C DE CC E2 88 33 67
0010 | 78 02 00 00 5C 07 E8 D0 28 72 1A 8E C4 CD 99 F8
0020 | A9 B9 5B DB 5A 5F D8 30 71 7F 48 CF 46 34 E2 07
0030 | D3 21 B7 A6 A0 50 39 82 FE 50 02 00 CD EB 38 E4
0040 | 95 1C 47 81 4F 9C 69 D4 68 9B AB E2 FD E1 B3 2B
0050 | E3 8D 5B BF D6 DE 93 F2 57 30 F8 42 D2 B0 77 3D
0060 | F9 52 C4 F3 21 84 42 FA 77 E7 E7 13 94 D8 94 49
0070 | 4E 78 7D 34 B4 41 12 66 9E 25 75 14 2F 1B 2E 8C
0080 | 42 F7 CD 03 36 DD BD D9 15 D9 42 C4 56 3B 7F 4A
0090 | 1C 21 63 49 77 30 60 DE 03 8E AF 14 35 93 B4 17
00A0 | 5E D1 F6 84 ED 90 A7 30 81 E0 E7 CC 63 B5 7A EE
00B0 | 98 40 31 09 E6 41 EA DD 87 5A 16 DE 07 C6 BA 51
00C0 | 5E 72 27 43 C2 14 8C D3 6B 8F 3D D7 67 4D 82 B7
00D0 | C4 27 B9 52 3E BA CC 1F D1 8F DE 29 0F 37 86 4C
00E0 | 4D CB 7A 3E 45 5F 97 4E D7 A3 ED C6 47 10 DB EB
00F0 | 42 29 C1 AD 29 10 3E 25 3F B3 C0 37 35 57 C3 22
0100 | D1 E6 5C B0 19 AD 18 CE E0 53 12 C3 00 01 A1 9A
0110 | A7 79 18 4D 11 FF 7E 59 21 C6 ED AD 23 E5 90 8E
0120 | BB AA D6 8B BB D7 E5 AE 08 8B 73 00 3C B0 80 9F
0130 | 9C 03 76 BC 13 1B C5 8B E3 32 AD 17 0A B5 50 71
0140 | A2 52 88 B5 6E 8B A7 09 1B F7 3D 59 E7 B8 B9 CB
0150 | D0 C6 0A 88 A4 59 DD 36 AE 9E 0A 2C FE F9 98 A0
0160 | 6B 91 4C D0 43 99 D4 D1 20 19 2A 8D C4 94 13 61
0170 | F4 D4 22 3B E6 E2 4A 81 72 DF AA 51 A3 6C 25 AA
0180 | D8 1E E7 86 5B F9 4A DF 1D D9 3F 90 D1 B0 83 DE
0190 | 81 2D 4E 67 25 F5 6B 6D FB 5D 8E 5D 15 79 5E 5F
01A0 | 36 56 3B A0 63 3F 30 8F 35 EB 50 72 42 E4 41 66
01B0 | 4A AE 15 42 97 07 25 9F 44 E4 A1 F2 77 FE 67 6A
01C0 | 13 BD BA C7 6D 8D AD 42 40 44 85 E5 33 E8 C1 51
01D0 | 33 A5 CA 83 75 53 B8 CB 94 94 3F 31 CD 10 53 74
01E0 | A8 7A E8 7B 8D E0 25 12 32 4E DF 0F B2 63 AC 99
01F0 | 5C 5D 87 61 5C EC BA DD 7B FD C5 38 CD F1 57 AB
0200 | 82 22 B5 79 69 2F 9F 40 4B 51 5A 2A C0 4D 64 8F
0210 | E8 65 6B 03 9D 15 03 86 CF 55 0A E1 C2 02 03 9C
0220 | 88 73 90 57 DC 3C 82 40 A2 0F AB 6A 3C 31 04 6B
0230 | FC 1E 7E E7 EF 2B B8 91 81 A3 9F 1D 08 15 AE F3
0240 | 83 43 5B DD 8F E9 66 D0 AF 5C 95 3D 2D 1C 44 7E
0250 | F0 5A 52 7A 34 D2 4F BB D1 7F 14 7A 53 E1 30 40
0260 | A6 AF DA 17 BD B7 16 11 18 8F 53 34 30 E8 4E CB
0270 | 18 5E AD 2A FA D1 71 57 AC 3A C0 D7 FA AD B1 EC
0280 | E9 23 23 D9 11 27 3D 50 86 13 70 8E</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 00 AC A9 34 F4 34 67
0010 | 78 02 00 00 5C 07 E8 D0 DB D8 C6 5A 8B 8D D0 75
0020 | E7 F9 55 69 3B 65 DD 5D 86 3C 64 43 9D 30 AC 3C
0030 | 57 17 3B BC 88 FF 8C C2 FE 50 02 00 CD C6 D0 97
0040 | 67 53 F5 30 1F CB 73 50 55 EB 36 84 50 D0 B6 47
0050 | D7 2D F5 49 A8 AA B9 3E 24 B1 66 4F 06 F1 B9 6C
0060 | 62 C1 80 5F 3D D1 C6 6F DD CB E7 15 A5 97 AA 78
0070 | A0 38 56 05 66 89 48 4F B9 EA F0 DD 73 48 F4 57
0080 | B7 EC 98 00 53 DB 7B 10 C9 F9 3E C9 9F F0 37 BE
0090 | 0A 76 4E 96 AE 07 C0 42 59 64 EF 09 50 67 CF 09
00A0 | 34 0A 9E 81 0C 34 61 7D 4E 71 52 34 4B 65 9D 05
00B0 | CB 7F A5 CA 12 89 CC 6E E9 D1 D8 1E 15 AF 1B 39
00C0 | DF 6E 7B F1 9F DC EC 62 19 D7 E0 C5 F9 38 F5 61
00D0 | FA 3E 96 E8 A4 60 ED D2 B7 3D A9 A6 F8 E1 6F 85
00E0 | D4 AF 12 83 51 13 40 E9 FB 73 5F 05 A1 79 3C DA
00F0 | 7F D6 B2 44 E7 BC 9B CA F5 EA B0 AA EC 0A 27 AF
0100 | 09 44 98 A1 70 FB 06 45 17 AE ED A6 85 F0 83 30
0110 | 1D 9A 9D FE DA 28 C0 32 34 B8 0A C7 8A 9B 3C E2
0120 | 1B 51 1D 45 3B 2C 2C F7 AE 50 70 10 9B B3 AA 79
0130 | 6A 69 39 6F C6 94 A4 C7 14 99 A6 C5 AD 19 87 E5
0140 | 8B 95 A6 96 78 B6 A0 A2 E0 5B 68 E8 3C 97 69 B8
0150 | 24 A1 D1 C7 1C 0B 68 CA D9 15 E3 D1 50 8D 36 F3
0160 | 4D 92 CF 34 6E 7A 2E 81 37 4A 30 15 38 42 A1 ED
0170 | CC 32 24 A2 9E C7 E9 94 E2 D4 94 4C 11 C0 4B 33
0180 | E5 89 27 8A EF 62 F2 68 B5 BE A4 13 71 98 4E E8
0190 | 6D F5 3E F1 48 F5 B0 9B 4B A7 EB 65 43 C8 56 C6
01A0 | CD 5E 9C AF FA C7 A7 7E 59 CE 25 31 A4 59 9C 81
01B0 | 79 0F 44 D0 7D B0 2A 98 9E 2D E8 B9 21 FA E2 BF
01C0 | 59 7D EE 46 3C 53 4D 5E 77 E8 A4 B8 51 0A AD E1
01D0 | 15 DA B8 BC 16 BE D9 09 94 77 4A F5 4C 53 DB 3A
01E0 | E0 69 A7 60 AC D6 DE 63 65 D3 0F 13 DC 90 53 0F
01F0 | 62 C7 77 9F 43 DC 7D 10 1C CF C5 F4 01 D1 12 16
0200 | EF BA 97 E0 EA 85 20 FD 51 F6 1D 19 48 78 0D DC
0210 | B3 B4 4D E3 91 E6 44 AA 8F 22 2F 8A DD AE 0B 87
0220 | D4 94 6F 16 1D 30 F9 F5 25 95 CC 73 14 54 4C 6C
0230 | 39 AB 11 3B D4 61 29 C1 D9 AC 03 66 A4 55 8E 49
0240 | 66 14 E9 20 9E 36 AD 9D 62 11 63 68 9B 18 5F 71
0250 | 19 D1 33 14 15 00 BD 18 28 B5 23 75 D7 60 E9 BE
0260 | EB 55 AF 64 29 90 52 5A 74 9B 0A FA CE 1B 35 96
0270 | C0 D3 4D 00 3B 4F 75 E6 89 1B 9B 38 77 F3 4E 76
0280 | 2E 59 54 E8 0A 53 B3 0D 93 3C 6A EF</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,7 +464,7 @@ random_padding_bytes = EE2FE5580491683FA67D4DD722AA8385F57F20D61CB0196FB6388C643
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>011CDECCE2883367</code></td>
<td><code>0100ACA934F43467</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>
@ -482,19 +482,19 @@ random_padding_bytes = EE2FE5580491683FA67D4DD722AA8385F57F20D61CB0196FB6388C643
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>28721A8EC4CD99F8A9B95BDB5A5FD830</code></td>
<td><code>DBD8C65A8B8DD075E7F955693B65DD5D</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>717F48CF4634E207D321B7A6A0503982</code></td>
<td><code>863C64439D30AC3C57173BBC88FF8CC2</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_answer</td>
<td>56, 596</td>
<td><code>FE500200CDEB38E4951C47814F9C69D4</code> <code>689BABE2FDE1B32BE38D5BBFD6DE93F2</code> <code>5730F842D2B0773DF952C4F3218442FA</code> <code>77E7E71394D894494E787D34B4411266</code> <code>9E2575142F1B2E8C42F7CD0336DDBDD9</code> <code>15D942C4563B7F4A1C216349773060DE</code> <code>038EAF143593B4175ED1F684ED90A730</code> <code>81E0E7CC63B57AEE98403109E641EADD</code> <code>875A16DE07C6BA515E722743C2148CD3</code> <code>6B8F3DD7674D82B7C427B9523EBACC1F</code> <code>D18FDE290F37864C4DCB7A3E455F974E</code> <code>D7A3EDC64710DBEB4229C1AD29103E25</code> <code>3FB3C0373557C322D1E65CB019AD18CE</code> <code>E05312C30001A19AA779184D11FF7E59</code> <code>21C6EDAD23E5908EBBAAD68BBBD7E5AE</code> <code>088B73003CB0809F9C0376BC131BC58B</code> <code>E332AD170AB55071A25288B56E8BA709</code> <code>1BF73D59E7B8B9CBD0C60A88A459DD36</code> <code>AE9E0A2CFEF998A06B914CD04399D4D1</code> <code>20192A8DC4941361F4D4223BE6E24A81</code> <code>72DFAA51A36C25AAD81EE7865BF94ADF</code> <code>1DD93F90D1B083DE812D4E6725F56B6D</code> <code>FB5D8E5D15795E5F36563BA0633F308F</code> <code>35EB507242E441664AAE15429707259F</code> <code>44E4A1F277FE676A13BDBAC76D8DAD42</code> <code>404485E533E8C15133A5CA837553B8CB</code> <code>94943F31CD105374A87AE87B8DE02512</code> <code>324EDF0FB263AC995C5D87615CECBADD</code> <code>7BFDC538CDF157AB8222B579692F9F40</code> <code>4B515A2AC04D648FE8656B039D150386</code> <code>CF550AE1C202039C88739057DC3C8240</code> <code>A20FAB6A3C31046BFC1E7EE7EF2BB891</code> <code>81A39F1D0815AEF383435BDD8FE966D0</code> <code>AF5C953D2D1C447EF05A527A34D24FBB</code> <code>D17F147A53E13040A6AFDA17BDB71611</code> <code>188F533430E84ECB185EAD2AFAD17157</code> <code>AC3AC0D7FAADB1ECE92323D911273D50</code><br> <code>8613708E</code></td>
<td><code>FE500200CDC6D0976753F5301FCB7350</code> <code>55EB368450D0B647D72DF549A8AAB93E</code> <code>24B1664F06F1B96C62C1805F3DD1C66F</code> <code>DDCBE715A597AA78A03856056689484F</code> <code>B9EAF0DD7348F457B7EC980053DB7B10</code> <code>C9F93EC99FF037BE0A764E96AE07C042</code> <code>5964EF095067CF09340A9E810C34617D</code> <code>4E7152344B659D05CB7FA5CA1289CC6E</code> <code>E9D1D81E15AF1B39DF6E7BF19FDCEC62</code> <code>19D7E0C5F938F561FA3E96E8A460EDD2</code> <code>B73DA9A6F8E16F85D4AF1283511340E9</code> <code>FB735F05A1793CDA7FD6B244E7BC9BCA</code> <code>F5EAB0AAEC0A27AF094498A170FB0645</code> <code>17AEEDA685F083301D9A9DFEDA28C032</code> <code>34B80AC78A9B3CE21B511D453B2C2CF7</code> <code>AE5070109BB3AA796A69396FC694A4C7</code> <code>1499A6C5AD1987E58B95A69678B6A0A2</code> <code>E05B68E83C9769B824A1D1C71C0B68CA</code> <code>D915E3D1508D36F34D92CF346E7A2E81</code> <code>374A30153842A1EDCC3224A29EC7E994</code> <code>E2D4944C11C04B33E589278AEF62F268</code> <code>B5BEA41371984EE86DF53EF148F5B09B</code> <code>4BA7EB6543C856C6CD5E9CAFFAC7A77E</code> <code>59CE2531A4599C81790F44D07DB02A98</code> <code>9E2DE8B921FAE2BF597DEE463C534D5E</code> <code>77E8A4B8510AADE115DAB8BC16BED909</code> <code>94774AF54C53DB3AE069A760ACD6DE63</code> <code>65D30F13DC90530F62C7779F43DC7D10</code> <code>1CCFC5F401D11216EFBA97E0EA8520FD</code> <code>51F61D1948780DDCB3B44DE391E644AA</code> <code>8F222F8ADDAE0B87D4946F161D30F9F5</code> <code>2595CC7314544C6C39AB113BD46129C1</code> <code>D9AC0366A4558E496614E9209E36AD9D</code> <code>621163689B185F7119D133141500BD18</code> <code>28B52375D760E9BEEB55AF642990525A</code> <code>749B0AFACE1B3596C0D34D003B4F75E6</code> <code>891B9B3877F34E762E5954E80A53B30D</code><br> <code>933C6AEF</code></td>
<td>See below</td>
</tr>
</tbody>
@ -502,20 +502,20 @@ random_padding_bytes = EE2FE5580491683FA67D4DD722AA8385F57F20D61CB0196FB6388C643
<!-- 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 = CDEB38E4951C47814F9C69D4689BABE2FDE1B32BE38D5BBFD6DE93F25730F842D2B0773DF952C4F3218442FA77E7E71394D894494E787D34B44112669E2575142F1B2E8C42F7CD0336DDBDD915D942C4563B7F4A1C216349773060DE038EAF143593B4175ED1F684ED90A73081E0E7CC63B57AEE98403109E641EADD875A16DE07C6BA515E722743C2148CD36B8F3DD7674D82B7C427B9523EBACC1FD18FDE290F37864C4DCB7A3E455F974ED7A3EDC64710DBEB4229C1AD29103E253FB3C0373557C322D1E65CB019AD18CEE05312C30001A19AA779184D11FF7E5921C6EDAD23E5908EBBAAD68BBBD7E5AE088B73003CB0809F9C0376BC131BC58BE332AD170AB55071A25288B56E8BA7091BF73D59E7B8B9CBD0C60A88A459DD36AE9E0A2CFEF998A06B914CD04399D4D120192A8DC4941361F4D4223BE6E24A8172DFAA51A36C25AAD81EE7865BF94ADF1DD93F90D1B083DE812D4E6725F56B6DFB5D8E5D15795E5F36563BA0633F308F35EB507242E441664AAE15429707259F44E4A1F277FE676A13BDBAC76D8DAD42404485E533E8C15133A5CA837553B8CB94943F31CD105374A87AE87B8DE02512324EDF0FB263AC995C5D87615CECBADD7BFDC538CDF157AB8222B579692F9F404B515A2AC04D648FE8656B039D150386CF550AE1C202039C88739057DC3C8240A20FAB6A3C31046BFC1E7EE7EF2BB89181A39F1D0815AEF383435BDD8FE966D0AF5C953D2D1C447EF05A527A34D24FBBD17F147A53E13040A6AFDA17BDB71611188F533430E84ECB185EAD2AFAD17157AC3AC0D7FAADB1ECE92323D911273D508613708E
tmp_aes_key = F12B07E505018CEF441EC420E14670A2D76C55D01508ED3E0CA30463E513172B
tmp_aes_iv = 683098AF19C8B22A4C3BF3CA68BEC24BC944B62BD94EAC23AADABF7B56849E7F</code></pre>
<pre><code>encrypted_answer = CDC6D0976753F5301FCB735055EB368450D0B647D72DF549A8AAB93E24B1664F06F1B96C62C1805F3DD1C66FDDCBE715A597AA78A03856056689484FB9EAF0DD7348F457B7EC980053DB7B10C9F93EC99FF037BE0A764E96AE07C0425964EF095067CF09340A9E810C34617D4E7152344B659D05CB7FA5CA1289CC6EE9D1D81E15AF1B39DF6E7BF19FDCEC6219D7E0C5F938F561FA3E96E8A460EDD2B73DA9A6F8E16F85D4AF1283511340E9FB735F05A1793CDA7FD6B244E7BC9BCAF5EAB0AAEC0A27AF094498A170FB064517AEEDA685F083301D9A9DFEDA28C03234B80AC78A9B3CE21B511D453B2C2CF7AE5070109BB3AA796A69396FC694A4C71499A6C5AD1987E58B95A69678B6A0A2E05B68E83C9769B824A1D1C71C0B68CAD915E3D1508D36F34D92CF346E7A2E81374A30153842A1EDCC3224A29EC7E994E2D4944C11C04B33E589278AEF62F268B5BEA41371984EE86DF53EF148F5B09B4BA7EB6543C856C6CD5E9CAFFAC7A77E59CE2531A4599C81790F44D07DB02A989E2DE8B921FAE2BF597DEE463C534D5E77E8A4B8510AADE115DAB8BC16BED90994774AF54C53DB3AE069A760ACD6DE6365D30F13DC90530F62C7779F43DC7D101CCFC5F401D11216EFBA97E0EA8520FD51F61D1948780DDCB3B44DE391E644AA8F222F8ADDAE0B87D4946F161D30F9F52595CC7314544C6C39AB113BD46129C1D9AC0366A4558E496614E9209E36AD9D621163689B185F7119D133141500BD1828B52375D760E9BEEB55AF642990525A749B0AFACE1B3596C0D34D003B4F75E6891B9B3877F34E762E5954E80A53B30D933C6AEF
tmp_aes_key = 8BB0E8A7D11015E61D7F335CE32530072F3C52660F4A6CBA1E4C8EE7536B9D33
tmp_aes_iv = BDD73B7CBBC3BECA871EB5272997C64A7C874A04055F525066A94837CD8CADBC</code></pre>
<!-- end server_DH_inner_data_input -->
<p>Yielding:</p>
<!-- start server_DH_inner_data_output -->
<pre><code>answer_with_hash = 1D19AEE2F97D1271F02A9C2E11357FBEC93AFB44BA0D89B528721A8EC4CD99F8A9B95BDB5A5FD830717F48CF4634E207D321B7A6A050398203000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE0001009F3F786150218F6372353293B0B058436C6E0909E7725DF6F9253A7226347EAF95201B6692D9D66C96D08CB5574AE5BC94F599F3219B09BCE0AF7389A5C1C663C896B18EA73CE88A118B32C2080C197052C84687279C0B2BFEE96971511A64C75A4C32934F83EEBA5AD4D6E82204B8B877F7FF86F993EB5B6460067FC711F87C377E2898A9FDBAB1D30FC4E2F084F3D65844089637F3B0E67AAFAEB345D80F0A6B6BE2A65D1726F942431A3E89F7D3094BB570EE3E2DC325BCE3472F65582910DC21C7A7CB96CB9F8B9767192F053DCE8AE71C6E8C3C6C4D56D990FA7A37D8808A5723119D3D0D4E97932C5BC269453A3D1605CEC250605A42F527E080626B7AE2883367328EF2E0C51ACECC
answer = BA0D89B528721A8EC4CD99F8A9B95BDB5A5FD830717F48CF4634E207D321B7A6A050398203000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE0001009F3F786150218F6372353293B0B058436C6E0909E7725DF6F9253A7226347EAF95201B6692D9D66C96D08CB5574AE5BC94F599F3219B09BCE0AF7389A5C1C663C896B18EA73CE88A118B32C2080C197052C84687279C0B2BFEE96971511A64C75A4C32934F83EEBA5AD4D6E82204B8B877F7FF86F993EB5B6460067FC711F87C377E2898A9FDBAB1D30FC4E2F084F3D65844089637F3B0E67AAFAEB345D80F0A6B6BE2A65D1726F942431A3E89F7D3094BB570EE3E2DC325BCE3472F65582910DC21C7A7CB96CB9F8B9767192F053DCE8AE71C6E8C3C6C4D56D990FA7A37D8808A5723119D3D0D4E97932C5BC269453A3D1605CEC250605A42F527E080626B7AE2883367328EF2E0C51ACECC</code></pre>
<pre><code>answer_with_hash = C10EBED9B82736A8B9160F2ACBFC4BC2B8B92049BA0D89B5DBD8C65A8B8DD075E7F955693B65DD5D863C64439D30AC3C57173BBC88FF8CC203000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100083F59BDA49674F3E3F6FEACD421D0DF943E763A610DC046A64E61AA52E9D685A18A30F28507B2570FAC187E5B6D07BDC460F75AE2A71161FEA65F8131D19EDB320455931BB7F04A44E412BCB3192C9BFE2740B969C4F881E10734F520F82673CA4540E2001D9DAA57D3418E2AFFDABD521E90D60DC8D5D9AC824CFD918804BA930917A001778AF0BF7DD0F77A40F0C5FF058CE756EC5F9E098EB6DC436AE0B52F877E236AA71B412B40274DC8713AC42472B9F471A793E483A7432EB6C06BD7E166B2D95A314F5DA5176DBE5A12AFCC4D3857788B95CE7A7937DAC7F37007B75D19F63189E768DC7F90C606053D1155EF4954F97DF37080601AA7934E9CB41234F43467305FE0D56B31BA2A
answer = BA0D89B5DBD8C65A8B8DD075E7F955693B65DD5D863C64439D30AC3C57173BBC88FF8CC203000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100083F59BDA49674F3E3F6FEACD421D0DF943E763A610DC046A64E61AA52E9D685A18A30F28507B2570FAC187E5B6D07BDC460F75AE2A71161FEA65F8131D19EDB320455931BB7F04A44E412BCB3192C9BFE2740B969C4F881E10734F520F82673CA4540E2001D9DAA57D3418E2AFFDABD521E90D60DC8D5D9AC824CFD918804BA930917A001778AF0BF7DD0F77A40F0C5FF058CE756EC5F9E098EB6DC436AE0B52F877E236AA71B412B40274DC8713AC42472B9F471A793E483A7432EB6C06BD7E166B2D95A314F5DA5176DBE5A12AFCC4D3857788B95CE7A7937DAC7F37007B75D19F63189E768DC7F90C606053D1155EF4954F97DF37080601AA7934E9CB41234F43467305FE0D56B31BA2A</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 28 72 1A 8E C4 CD 99 F8 A9 B9 5B DB
0010 | 5A 5F D8 30 71 7F 48 CF 46 34 E2 07 D3 21 B7 A6
0020 | A0 50 39 82 03 00 00 00 FE 00 01 00 C7 1C AE B9
<pre><code>0000 | BA 0D 89 B5 DB D8 C6 5A 8B 8D D0 75 E7 F9 55 69
0010 | 3B 65 DD 5D 86 3C 64 43 9D 30 AC 3C 57 17 3B BC
0020 | 88 FF 8C C2 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 = BA0D89B528721A8EC4CD99F8A9B95BDB5A5FD830717F48CF4634E207D321B7A6A050398
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 | 9F 3F 78 61 50 21 8F 63 72 35 32 93 B0 B0 58 43
0140 | 6C 6E 09 09 E7 72 5D F6 F9 25 3A 72 26 34 7E AF
0150 | 95 20 1B 66 92 D9 D6 6C 96 D0 8C B5 57 4A E5 BC
0160 | 94 F5 99 F3 21 9B 09 BC E0 AF 73 89 A5 C1 C6 63
0170 | C8 96 B1 8E A7 3C E8 8A 11 8B 32 C2 08 0C 19 70
0180 | 52 C8 46 87 27 9C 0B 2B FE E9 69 71 51 1A 64 C7
0190 | 5A 4C 32 93 4F 83 EE BA 5A D4 D6 E8 22 04 B8 B8
01A0 | 77 F7 FF 86 F9 93 EB 5B 64 60 06 7F C7 11 F8 7C
01B0 | 37 7E 28 98 A9 FD BA B1 D3 0F C4 E2 F0 84 F3 D6
01C0 | 58 44 08 96 37 F3 B0 E6 7A AF AE B3 45 D8 0F 0A
01D0 | 6B 6B E2 A6 5D 17 26 F9 42 43 1A 3E 89 F7 D3 09
01E0 | 4B B5 70 EE 3E 2D C3 25 BC E3 47 2F 65 58 29 10
01F0 | DC 21 C7 A7 CB 96 CB 9F 8B 97 67 19 2F 05 3D CE
0200 | 8A E7 1C 6E 8C 3C 6C 4D 56 D9 90 FA 7A 37 D8 80
0210 | 8A 57 23 11 9D 3D 0D 4E 97 93 2C 5B C2 69 45 3A
0220 | 3D 16 05 CE C2 50 60 5A 42 F5 27 E0 80 62 6B 7A
0230 | E2 88 33 67</code></pre>
0130 | 08 3F 59 BD A4 96 74 F3 E3 F6 FE AC D4 21 D0 DF
0140 | 94 3E 76 3A 61 0D C0 46 A6 4E 61 AA 52 E9 D6 85
0150 | A1 8A 30 F2 85 07 B2 57 0F AC 18 7E 5B 6D 07 BD
0160 | C4 60 F7 5A E2 A7 11 61 FE A6 5F 81 31 D1 9E DB
0170 | 32 04 55 93 1B B7 F0 4A 44 E4 12 BC B3 19 2C 9B
0180 | FE 27 40 B9 69 C4 F8 81 E1 07 34 F5 20 F8 26 73
0190 | CA 45 40 E2 00 1D 9D AA 57 D3 41 8E 2A FF DA BD
01A0 | 52 1E 90 D6 0D C8 D5 D9 AC 82 4C FD 91 88 04 BA
01B0 | 93 09 17 A0 01 77 8A F0 BF 7D D0 F7 7A 40 F0 C5
01C0 | FF 05 8C E7 56 EC 5F 9E 09 8E B6 DC 43 6A E0 B5
01D0 | 2F 87 7E 23 6A A7 1B 41 2B 40 27 4D C8 71 3A C4
01E0 | 24 72 B9 F4 71 A7 93 E4 83 A7 43 2E B6 C0 6B D7
01F0 | E1 66 B2 D9 5A 31 4F 5D A5 17 6D BE 5A 12 AF CC
0200 | 4D 38 57 78 8B 95 CE 7A 79 37 DA C7 F3 70 07 B7
0210 | 5D 19 F6 31 89 E7 68 DC 7F 90 C6 06 05 3D 11 55
0220 | EF 49 54 F9 7D F3 70 80 60 1A A7 93 4E 9C B4 12
0230 | 34 F4 34 67</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 = BA0D89B528721A8EC4CD99F8A9B95BDB5A5FD830717F48CF4634E207D321B7A6A050398
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>28721A8EC4CD99F8A9B95BDB5A5FD830</code></td>
<td><code>DBD8C65A8B8DD075E7F955693B65DD5D</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>717F48CF4634E207D321B7A6A0503982</code></td>
<td><code>863C64439D30AC3C57173BBC88FF8CC2</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
@ -594,13 +594,13 @@ answer = BA0D89B528721A8EC4CD99F8A9B95BDB5A5FD830717F48CF4634E207D321B7A6A050398
<tr>
<td>g_a</td>
<td>300, 260</td>
<td><code>FE0001009F3F786150218F6372353293</code> <code>B0B058436C6E0909E7725DF6F9253A72</code> <code>26347EAF95201B6692D9D66C96D08CB5</code> <code>574AE5BC94F599F3219B09BCE0AF7389</code> <code>A5C1C663C896B18EA73CE88A118B32C2</code> <code>080C197052C84687279C0B2BFEE96971</code> <code>511A64C75A4C32934F83EEBA5AD4D6E8</code> <code>2204B8B877F7FF86F993EB5B6460067F</code> <code>C711F87C377E2898A9FDBAB1D30FC4E2</code> <code>F084F3D65844089637F3B0E67AAFAEB3</code> <code>45D80F0A6B6BE2A65D1726F942431A3E</code> <code>89F7D3094BB570EE3E2DC325BCE3472F</code> <code>65582910DC21C7A7CB96CB9F8B976719</code> <code>2F053DCE8AE71C6E8C3C6C4D56D990FA</code> <code>7A37D8808A5723119D3D0D4E97932C5B</code> <code>C269453A3D1605CEC250605A42F527E0</code><br> <code>80626B7A</code></td>
<td><code>FE000100083F59BDA49674F3E3F6FEAC</code> <code>D421D0DF943E763A610DC046A64E61AA</code> <code>52E9D685A18A30F28507B2570FAC187E</code> <code>5B6D07BDC460F75AE2A71161FEA65F81</code> <code>31D19EDB320455931BB7F04A44E412BC</code> <code>B3192C9BFE2740B969C4F881E10734F5</code> <code>20F82673CA4540E2001D9DAA57D3418E</code> <code>2AFFDABD521E90D60DC8D5D9AC824CFD</code> <code>918804BA930917A001778AF0BF7DD0F7</code> <code>7A40F0C5FF058CE756EC5F9E098EB6DC</code> <code>436AE0B52F877E236AA71B412B40274D</code> <code>C8713AC42472B9F471A793E483A7432E</code> <code>B6C06BD7E166B2D95A314F5DA5176DBE</code> <code>5A12AFCC4D3857788B95CE7A7937DAC7</code> <code>F37007B75D19F63189E768DC7F90C606</code> <code>053D1155EF4954F97DF37080601AA793</code><br> <code>4E9CB412</code></td>
<td><code>g_a</code> diffie-hellman parameter</td>
</tr>
<tr>
<td>server_time</td>
<td>560, 4</td>
<td><code>E2883367</code> (1731430626 in decimal)</td>
<td><code>34F43467</code> (1731523636 in decimal)</td>
<td>Server time</td>
</tr>
</tbody>
@ -609,34 +609,34 @@ answer = BA0D89B528721A8EC4CD99F8A9B95BDB5A5FD830717F48CF4634E207D321B7A6A050398
<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 = BF5313623DDC964E770267719AF1999200EA654AFB5908430F1591AC20F06239B4C604A3B4F92FD79AF775FE706937E5A4D51505BF632510109E9F8B874DA67E312520030E21631718F12FEA4B0FFF7B5765FF5C74CA85EB4BE33CE2B58A2B7F0D9DFEF7888EB30C6F693FDB70EAB365D7B6D052EE8DC5163A4F9BFAE3CFC62C3913D5E83063A96167D16F56446BB0B3837154FA8F92EBF17DDB51DE4872A76F6E3A55D2DAF77E69456966DB9F60AA3F063143F4600F5F22E7BD530E3A5FC613EBFAAC2F96F798C04B1BBA9B038A8C951F07EE9E9EDD3316F7823A104AE6D2AC931417E3E251AE898A7E7CEDD3B661BDAAA4B1111CC9CA07AB38D7869C9557B4</code></pre>
<pre><code>b = 9540E9BEDDAF1FEAAEF6E8DB9626EB0C9D9DDA91409861B6762C60CF39A1CE0EAABA2B08527A1EE27C223C3661FC5753000F704E6307777C115FFCFF652761022686C66100E449F23E5B747B96108B053A9A735D8D21D7C1A1BB47DEB8FBE08AD039D97EDCA4980399ABC3C98337B0BE45C9519AB2E8304A464641EA405E07D8886A7853949C1C24603C077D59E2952108142999964734549FBD8ED0146EC32C945A451A1EEDF58953EF09E13ACC10C17D3EAF784E0FA2436D90E71B510018B7FCBD8CA906CDAB68D38690F14949D9E5B9B7C049873D9C957DC25BD87FB7C4913573E4260D29875FFC21DF3583D1C8B08198AD64F6314EF01895C709F1354B9B</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 = 31E2FE823C46A7A7AD37A807D74635A473C2BBFE73C00261D190B10AC27F65107CCB4525169C418516B721B2CE33675C26FDF584DB3CF3637F02B559E84EF49472DA402D94BF5B58E17ADD1C11D45567FA67E3F15242F380B50C53F806AC764B3E4725E685ADB52A0EF2D272F750931B327670D29F273802DB7C161BA8A34454026AA687694A11459D79AE92F9678D110E33E561B31C1F421BC00EBD0BA0AD735FB77732ED37308ADE5CD069D13BAD0D6B22214D04DFE804EA44E3A5418B0AB8A04D32B6CBBE32714E2596F4E7DCBE4EB8F9124C20E467D4B3256F8E80F06B9009BC40C1E387FC8DC38A8A50832670F37C8921E3D84FE15BDD58F677346354D1</code></pre>
<pre><code>g_b = 56499B798E003EBF329EB51391E02B948E8A252B1510BCAF70973321F456D578AB570A16BBF2A0075DAF4FA0088647D9CA490C66B93EF960509A72DEDE66DDABABE947A61FB054044FF4C3280FFD632F28C418827B31935863749096B01D92CEC64222DE18E6475B72CA52B9213E7E8A9B754D05A985DF0B857BB71A3D2AB8FF4113776EB77E3062CA3B7DD510CD4C6145D7E436CCB93E46A8D27FB7898D9F7F5DA345C2E46617D0CE5B988D751A47E5697A93CCFC133373EFB38A49746F732EFD4609C37F5C89F0706913F9C096259600125C40FAD9769A059454418CDC0B960E70DC80A2C206DE40D1B74DAF3CAD96E77214996D723998540E294F65C87C8D</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 28 72 1A 8E C4 CD 99 F8 A9 B9 5B DB
0010 | 5A 5F D8 30 71 7F 48 CF 46 34 E2 07 D3 21 B7 A6
0020 | A0 50 39 82 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | 31 E2 FE 82 3C 46 A7 A7 AD 37 A8 07 D7 46 35 A4
0040 | 73 C2 BB FE 73 C0 02 61 D1 90 B1 0A C2 7F 65 10
0050 | 7C CB 45 25 16 9C 41 85 16 B7 21 B2 CE 33 67 5C
0060 | 26 FD F5 84 DB 3C F3 63 7F 02 B5 59 E8 4E F4 94
0070 | 72 DA 40 2D 94 BF 5B 58 E1 7A DD 1C 11 D4 55 67
0080 | FA 67 E3 F1 52 42 F3 80 B5 0C 53 F8 06 AC 76 4B
0090 | 3E 47 25 E6 85 AD B5 2A 0E F2 D2 72 F7 50 93 1B
00A0 | 32 76 70 D2 9F 27 38 02 DB 7C 16 1B A8 A3 44 54
00B0 | 02 6A A6 87 69 4A 11 45 9D 79 AE 92 F9 67 8D 11
00C0 | 0E 33 E5 61 B3 1C 1F 42 1B C0 0E BD 0B A0 AD 73
00D0 | 5F B7 77 32 ED 37 30 8A DE 5C D0 69 D1 3B AD 0D
00E0 | 6B 22 21 4D 04 DF E8 04 EA 44 E3 A5 41 8B 0A B8
00F0 | A0 4D 32 B6 CB BE 32 71 4E 25 96 F4 E7 DC BE 4E
0100 | B8 F9 12 4C 20 E4 67 D4 B3 25 6F 8E 80 F0 6B 90
0110 | 09 BC 40 C1 E3 87 FC 8D C3 8A 8A 50 83 26 70 F3
0120 | 7C 89 21 E3 D8 4F E1 5B DD 58 F6 77 34 63 54 D1</code></pre>
<pre><code>0000 | 54 B6 43 66 DB D8 C6 5A 8B 8D D0 75 E7 F9 55 69
0010 | 3B 65 DD 5D 86 3C 64 43 9D 30 AC 3C 57 17 3B BC
0020 | 88 FF 8C C2 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | 56 49 9B 79 8E 00 3E BF 32 9E B5 13 91 E0 2B 94
0040 | 8E 8A 25 2B 15 10 BC AF 70 97 33 21 F4 56 D5 78
0050 | AB 57 0A 16 BB F2 A0 07 5D AF 4F A0 08 86 47 D9
0060 | CA 49 0C 66 B9 3E F9 60 50 9A 72 DE DE 66 DD AB
0070 | AB E9 47 A6 1F B0 54 04 4F F4 C3 28 0F FD 63 2F
0080 | 28 C4 18 82 7B 31 93 58 63 74 90 96 B0 1D 92 CE
0090 | C6 42 22 DE 18 E6 47 5B 72 CA 52 B9 21 3E 7E 8A
00A0 | 9B 75 4D 05 A9 85 DF 0B 85 7B B7 1A 3D 2A B8 FF
00B0 | 41 13 77 6E B7 7E 30 62 CA 3B 7D D5 10 CD 4C 61
00C0 | 45 D7 E4 36 CC B9 3E 46 A8 D2 7F B7 89 8D 9F 7F
00D0 | 5D A3 45 C2 E4 66 17 D0 CE 5B 98 8D 75 1A 47 E5
00E0 | 69 7A 93 CC FC 13 33 73 EF B3 8A 49 74 6F 73 2E
00F0 | FD 46 09 C3 7F 5C 89 F0 70 69 13 F9 C0 96 25 96
0100 | 00 12 5C 40 FA D9 76 9A 05 94 54 41 8C DC 0B 96
0110 | 0E 70 DC 80 A2 C2 06 DE 40 D1 B7 4D AF 3C AD 96
0120 | E7 72 14 99 6D 72 39 98 54 0E 29 4F 65 C8 7C 8D</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 = BA0D89B528721A8EC4CD99F8A9B95BDB5A5FD830717F48CF4634E207D321B7A6A050398
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>28721A8EC4CD99F8A9B95BDB5A5FD830</code></td>
<td><code>DBD8C65A8B8DD075E7F955693B65DD5D</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>717F48CF4634E207D321B7A6A0503982</code></td>
<td><code>863C64439D30AC3C57173BBC88FF8CC2</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>g_b</td>
<td>36, 260</td>
<td><code>FE00010031E2FE823C46A7A7AD37A807</code> <code>D74635A473C2BBFE73C00261D190B10A</code> <code>C27F65107CCB4525169C418516B721B2</code> <code>CE33675C26FDF584DB3CF3637F02B559</code> <code>E84EF49472DA402D94BF5B58E17ADD1C</code> <code>11D45567FA67E3F15242F380B50C53F8</code> <code>06AC764B3E4725E685ADB52A0EF2D272</code> <code>F750931B327670D29F273802DB7C161B</code> <code>A8A34454026AA687694A11459D79AE92</code> <code>F9678D110E33E561B31C1F421BC00EBD</code> <code>0BA0AD735FB77732ED37308ADE5CD069</code> <code>D13BAD0D6B22214D04DFE804EA44E3A5</code> <code>418B0AB8A04D32B6CBBE32714E2596F4</code> <code>E7DCBE4EB8F9124C20E467D4B3256F8E</code> <code>80F06B9009BC40C1E387FC8DC38A8A50</code> <code>832670F37C8921E3D84FE15BDD58F677</code><br> <code>346354D1</code></td>
<td><code>FE00010056499B798E003EBF329EB513</code> <code>91E02B948E8A252B1510BCAF70973321</code> <code>F456D578AB570A16BBF2A0075DAF4FA0</code> <code>088647D9CA490C66B93EF960509A72DE</code> <code>DE66DDABABE947A61FB054044FF4C328</code> <code>0FFD632F28C418827B31935863749096</code> <code>B01D92CEC64222DE18E6475B72CA52B9</code> <code>213E7E8A9B754D05A985DF0B857BB71A</code> <code>3D2AB8FF4113776EB77E3062CA3B7DD5</code> <code>10CD4C6145D7E436CCB93E46A8D27FB7</code> <code>898D9F7F5DA345C2E46617D0CE5B988D</code> <code>751A47E5697A93CCFC133373EFB38A49</code> <code>746F732EFD4609C37F5C89F0706913F9</code> <code>C096259600125C40FAD9769A05945441</code> <code>8CDC0B960E70DC80A2C206DE40D1B74D</code> <code>AF3CAD96E77214996D723998540E294F</code><br> <code>65C87C8D</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 = BA0D89B528721A8EC4CD99F8A9B95BDB5A5FD830717F48CF4634E207D321B7A6A050398
<!-- 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 = 54B6436628721A8EC4CD99F8A9B95BDB5A5FD830717F48CF4634E207D321B7A6A05039820000000000000000FE00010031E2FE823C46A7A7AD37A807D74635A473C2BBFE73C00261D190B10AC27F65107CCB4525169C418516B721B2CE33675C26FDF584DB3CF3637F02B559E84EF49472DA402D94BF5B58E17ADD1C11D45567FA67E3F15242F380B50C53F806AC764B3E4725E685ADB52A0EF2D272F750931B327670D29F273802DB7C161BA8A34454026AA687694A11459D79AE92F9678D110E33E561B31C1F421BC00EBD0BA0AD735FB77732ED37308ADE5CD069D13BAD0D6B22214D04DFE804EA44E3A5418B0AB8A04D32B6CBBE32714E2596F4E7DCBE4EB8F9124C20E467D4B3256F8E80F06B9009BC40C1E387FC8DC38A8A50832670F37C8921E3D84FE15BDD58F677346354D1
padding = 5CC4064BAFD1F5AAD4341D9E
tmp_aes_key = F12B07E505018CEF441EC420E14670A2D76C55D01508ED3E0CA30463E513172B
tmp_aes_iv = 683098AF19C8B22A4C3BF3CA68BEC24BC944B62BD94EAC23AADABF7B56849E7F</code></pre>
<pre><code>data = 54B64366DBD8C65A8B8DD075E7F955693B65DD5D863C64439D30AC3C57173BBC88FF8CC20000000000000000FE00010056499B798E003EBF329EB51391E02B948E8A252B1510BCAF70973321F456D578AB570A16BBF2A0075DAF4FA0088647D9CA490C66B93EF960509A72DEDE66DDABABE947A61FB054044FF4C3280FFD632F28C418827B31935863749096B01D92CEC64222DE18E6475B72CA52B9213E7E8A9B754D05A985DF0B857BB71A3D2AB8FF4113776EB77E3062CA3B7DD510CD4C6145D7E436CCB93E46A8D27FB7898D9F7F5DA345C2E46617D0CE5B988D751A47E5697A93CCFC133373EFB38A49746F732EFD4609C37F5C89F0706913F9C096259600125C40FAD9769A059454418CDC0B960E70DC80A2C206DE40D1B74DAF3CAD96E77214996D723998540E294F65C87C8D
padding = F46E273AC7BC0C04F3E10C24
tmp_aes_key = 8BB0E8A7D11015E61D7F335CE32530072F3C52660F4A6CBA1E4C8EE7536B9D33
tmp_aes_iv = BDD73B7CBBC3BECA871EB5272997C64A7C874A04055F525066A94837CD8CADBC</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 = C53460B35E1B0E9202D41310487197DFDB1E1A5BF3ED6FC4758B2FCB7587FA63E5B14EF202493E2A59EA09C8547927243F16EE93C3F2EB0277FC6C723BE7C53CE5571741EB192FDEC9ECD38D19490647E28B295149C1A9C8CA064B7C7ED6A05E0BDCF339B5CCFC9262721794DE5136C0441C2F130B7BF548692F252E47D9DD37FBCF08A4A1ECE99991EFAAA2869B159DF72EDB286546DBFB805DD19722BB5683F3A424B2CE0FC1A6CAEC4CA01568ADFC1CBDBB1F75260C9E065B13F33A6E7ECD5283E96B6664BC546EA0531EC210B7F8EC4C9BA760A84E5E2D95D52F1A83A2C1DA0C512DB8F30E8B4449DDE7C028D34BC54C05271B3F72C3F3FC60438B76F7E51CB1E7DCE53DCFE23686E39E9C4A9954A1784C2EE4F8E70520D2F2805600BDFF733ED7DD6EA619F74BFB4BA2AD24F12D07416CB4F59FB50CB1E59C244ADC44E897870C71EF5C24E89BE1D56F94F071F7</code></pre>
<pre><code>encrypted_data = BD50BC0C2A9ADE0325559B931EA9EEFB8318BB5C088E0F6E1A4450904E8BD27A6A17F47312B89B13675A3D6944B37773412877BC8B2D6D25B91B771CC2E91E3223CA016D136D80572AB44FC99A3FE5E13E3250F653E6DC2C9EAC5CD4DCF32E8A228DC56D81F3CED69EAB4C18D30381AD228D16DB3CFE2F3E8209F914871C5D38862C308554C78FE30032E58259EA93C132463FD13E85549A691700B86DFB8EEEAF06FC41CCE635EC6B702618A620ED0BA9A68494B00DCB60EBFE2BA528A56D167CE9EC05BE306032DB9750B9DE65255503D69F48975F222788CC6591024BBA8A950E976F6CDEBF858C3C8758CBAAC72991B3A05CE55DF50F0AFE3EB95615D2D80A0D21EC74E15FCEF2FA33BE65108D0A79BC9241E2731C99EABE4CECC83BC1CFC98B7F9FDCC20BDC05C6C16E8F32CD347775A8F36D4934350B7BA23C1220659BC5DC36310F5EA559DB87C797F1040395</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 14 61 06 00 E2 88 33 67
0010 | 78 01 00 00 1F 5F 04 F5 28 72 1A 8E C4 CD 99 F8
0020 | A9 B9 5B DB 5A 5F D8 30 71 7F 48 CF 46 34 E2 07
0030 | D3 21 B7 A6 A0 50 39 82 FE 50 01 00 C5 34 60 B3
0040 | 5E 1B 0E 92 02 D4 13 10 48 71 97 DF DB 1E 1A 5B
0050 | F3 ED 6F C4 75 8B 2F CB 75 87 FA 63 E5 B1 4E F2
0060 | 02 49 3E 2A 59 EA 09 C8 54 79 27 24 3F 16 EE 93
0070 | C3 F2 EB 02 77 FC 6C 72 3B E7 C5 3C E5 57 17 41
0080 | EB 19 2F DE C9 EC D3 8D 19 49 06 47 E2 8B 29 51
0090 | 49 C1 A9 C8 CA 06 4B 7C 7E D6 A0 5E 0B DC F3 39
00A0 | B5 CC FC 92 62 72 17 94 DE 51 36 C0 44 1C 2F 13
00B0 | 0B 7B F5 48 69 2F 25 2E 47 D9 DD 37 FB CF 08 A4
00C0 | A1 EC E9 99 91 EF AA A2 86 9B 15 9D F7 2E DB 28
00D0 | 65 46 DB FB 80 5D D1 97 22 BB 56 83 F3 A4 24 B2
00E0 | CE 0F C1 A6 CA EC 4C A0 15 68 AD FC 1C BD BB 1F
00F0 | 75 26 0C 9E 06 5B 13 F3 3A 6E 7E CD 52 83 E9 6B
0100 | 66 64 BC 54 6E A0 53 1E C2 10 B7 F8 EC 4C 9B A7
0110 | 60 A8 4E 5E 2D 95 D5 2F 1A 83 A2 C1 DA 0C 51 2D
0120 | B8 F3 0E 8B 44 49 DD E7 C0 28 D3 4B C5 4C 05 27
0130 | 1B 3F 72 C3 F3 FC 60 43 8B 76 F7 E5 1C B1 E7 DC
0140 | E5 3D CF E2 36 86 E3 9E 9C 4A 99 54 A1 78 4C 2E
0150 | E4 F8 E7 05 20 D2 F2 80 56 00 BD FF 73 3E D7 DD
0160 | 6E A6 19 F7 4B FB 4B A2 AD 24 F1 2D 07 41 6C B4
0170 | F5 9F B5 0C B1 E5 9C 24 4A DC 44 E8 97 87 0C 71
0180 | EF 5C 24 E8 9B E1 D5 6F 94 F0 71 F7</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 64 E8 04 00 34 F4 34 67
0010 | 78 01 00 00 1F 5F 04 F5 DB D8 C6 5A 8B 8D D0 75
0020 | E7 F9 55 69 3B 65 DD 5D 86 3C 64 43 9D 30 AC 3C
0030 | 57 17 3B BC 88 FF 8C C2 FE 50 01 00 BD 50 BC 0C
0040 | 2A 9A DE 03 25 55 9B 93 1E A9 EE FB 83 18 BB 5C
0050 | 08 8E 0F 6E 1A 44 50 90 4E 8B D2 7A 6A 17 F4 73
0060 | 12 B8 9B 13 67 5A 3D 69 44 B3 77 73 41 28 77 BC
0070 | 8B 2D 6D 25 B9 1B 77 1C C2 E9 1E 32 23 CA 01 6D
0080 | 13 6D 80 57 2A B4 4F C9 9A 3F E5 E1 3E 32 50 F6
0090 | 53 E6 DC 2C 9E AC 5C D4 DC F3 2E 8A 22 8D C5 6D
00A0 | 81 F3 CE D6 9E AB 4C 18 D3 03 81 AD 22 8D 16 DB
00B0 | 3C FE 2F 3E 82 09 F9 14 87 1C 5D 38 86 2C 30 85
00C0 | 54 C7 8F E3 00 32 E5 82 59 EA 93 C1 32 46 3F D1
00D0 | 3E 85 54 9A 69 17 00 B8 6D FB 8E EE AF 06 FC 41
00E0 | CC E6 35 EC 6B 70 26 18 A6 20 ED 0B A9 A6 84 94
00F0 | B0 0D CB 60 EB FE 2B A5 28 A5 6D 16 7C E9 EC 05
0100 | BE 30 60 32 DB 97 50 B9 DE 65 25 55 03 D6 9F 48
0110 | 97 5F 22 27 88 CC 65 91 02 4B BA 8A 95 0E 97 6F
0120 | 6C DE BF 85 8C 3C 87 58 CB AA C7 29 91 B3 A0 5C
0130 | E5 5D F5 0F 0A FE 3E B9 56 15 D2 D8 0A 0D 21 EC
0140 | 74 E1 5F CE F2 FA 33 BE 65 10 8D 0A 79 BC 92 41
0150 | E2 73 1C 99 EA BE 4C EC C8 3B C1 CF C9 8B 7F 9F
0160 | DC C2 0B DC 05 C6 C1 6E 8F 32 CD 34 77 75 A8 F3
0170 | 6D 49 34 35 0B 7B A2 3C 12 20 65 9B C5 DC 36 31
0180 | 0F 5E A5 59 DB 87 C7 97 F1 04 03 95</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>14610600E2883367</code></td>
<td><code>64E8040034F43467</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>28721A8EC4CD99F8A9B95BDB5A5FD830</code></td>
<td><code>DBD8C65A8B8DD075E7F955693B65DD5D</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>717F48CF4634E207D321B7A6A0503982</code></td>
<td><code>863C64439D30AC3C57173BBC88FF8CC2</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_data</td>
<td>56, 340</td>
<td><code>FE500100C53460B35E1B0E9202D41310</code> <code>487197DFDB1E1A5BF3ED6FC4758B2FCB</code> <code>7587FA63E5B14EF202493E2A59EA09C8</code> <code>547927243F16EE93C3F2EB0277FC6C72</code> <code>3BE7C53CE5571741EB192FDEC9ECD38D</code> <code>19490647E28B295149C1A9C8CA064B7C</code> <code>7ED6A05E0BDCF339B5CCFC9262721794</code> <code>DE5136C0441C2F130B7BF548692F252E</code> <code>47D9DD37FBCF08A4A1ECE99991EFAAA2</code> <code>869B159DF72EDB286546DBFB805DD197</code> <code>22BB5683F3A424B2CE0FC1A6CAEC4CA0</code> <code>1568ADFC1CBDBB1F75260C9E065B13F3</code> <code>3A6E7ECD5283E96B6664BC546EA0531E</code> <code>C210B7F8EC4C9BA760A84E5E2D95D52F</code> <code>1A83A2C1DA0C512DB8F30E8B4449DDE7</code> <code>C028D34BC54C05271B3F72C3F3FC6043</code> <code>8B76F7E51CB1E7DCE53DCFE23686E39E</code> <code>9C4A9954A1784C2EE4F8E70520D2F280</code> <code>5600BDFF733ED7DD6EA619F74BFB4BA2</code> <code>AD24F12D07416CB4F59FB50CB1E59C24</code> <code>4ADC44E897870C71EF5C24E89BE1D56F</code><br> <code>94F071F7</code></td>
<td><code>FE500100BD50BC0C2A9ADE0325559B93</code> <code>1EA9EEFB8318BB5C088E0F6E1A445090</code> <code>4E8BD27A6A17F47312B89B13675A3D69</code> <code>44B37773412877BC8B2D6D25B91B771C</code> <code>C2E91E3223CA016D136D80572AB44FC9</code> <code>9A3FE5E13E3250F653E6DC2C9EAC5CD4</code> <code>DCF32E8A228DC56D81F3CED69EAB4C18</code> <code>D30381AD228D16DB3CFE2F3E8209F914</code> <code>871C5D38862C308554C78FE30032E582</code> <code>59EA93C132463FD13E85549A691700B8</code> <code>6DFB8EEEAF06FC41CCE635EC6B702618</code> <code>A620ED0BA9A68494B00DCB60EBFE2BA5</code> <code>28A56D167CE9EC05BE306032DB9750B9</code> <code>DE65255503D69F48975F222788CC6591</code> <code>024BBA8A950E976F6CDEBF858C3C8758</code> <code>CBAAC72991B3A05CE55DF50F0AFE3EB9</code> <code>5615D2D80A0D21EC74E15FCEF2FA33BE</code> <code>65108D0A79BC9241E2731C99EABE4CEC</code> <code>C83BC1CFC98B7F9FDCC20BDC05C6C16E</code> <code>8F32CD347775A8F36D4934350B7BA23C</code> <code>1220659BC5DC36310F5EA559DB87C797</code><br> <code>F1040395</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 = 13A90127DB37DB45A823B8ED894849E8FC5ED9A6805E00EF8CFC5FBCD04FEDCE077937C7A74328321BE620B10EDC05C884A1F9414277A9E9C325787ADA0A0399ACB98BCF6C3383B559E0EBA30F6EF5614E214FC8D0CD399456541D2E5EC0AED92A0F2CA2025F3B291009069F3A994BCE011D312EBBBC57081AF04660777B087C11070E29B5E190DA3C2CD5A4C3B5890BCD0DA6BACCDA745A0E99B58B327150D5BB63770794198AD5056676E0C19F6EF10163F018E64DDFAAEA002124B361761358A63B5B29DFE3E1E66F1441B725156FB1DABE444E576F1F8D28AE611903B2C5BF1158F2B36F702440A617B52F72122BE3039702E36138AAF50567F8794E3C7D</code></pre>
<pre><code>auth_key = C709354ABAEE02FC44484CD0A8EAF79CE5BB57BBBE944A12C344BB19BBFF403ADEA36EB8DA1686DFD2F58C2D960C9A633C9151C51FC0557C89B3B52E1CDFE0E195D327AC8C6CAE705BC35A9A5368ABCF2DB3C72A6722F653E4E3CE2775BDA50B28FD3F87740C894C24FF911AB2739F536ECAED731D5C2ED5A285752781161A828470E3FE3FF27C49490075BCB1A66E4FFC20A64C4945CFBEE56B919ED55B758D20784320C290D7C6F39CC8D68E12BA1D270DE3A02CF3505A2B779652AF9C019A4055770329AA996DD46A2A6001021A5C91891793B6CA6A99F0E8EA4DB9C591416BC5FFA9F7C53D4683A2AAB4410C2DD1A8E394DB969D33115AE184824C804830</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 98 6C 59 E4 88 33 67
0010 | 34 00 00 00 34 F7 CB 3B 28 72 1A 8E C4 CD 99 F8
0020 | A9 B9 5B DB 5A 5F D8 30 71 7F 48 CF 46 34 E2 07
0030 | D3 21 B7 A6 A0 50 39 82 05 7A 67 C6 69 0F DF 67
0040 | B2 F1 49 27 FE A2 E3 22</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 10 9B 55 36 F4 34 67
0010 | 34 00 00 00 34 F7 CB 3B DB D8 C6 5A 8B 8D D0 75
0020 | E7 F9 55 69 3B 65 DD 5D 86 3C 64 43 9D 30 AC 3C
0030 | 57 17 3B BC 88 FF 8C C2 E0 8A A8 79 70 AF 59 C8
0040 | 51 23 FF BF 88 BE B3 16</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,7 +817,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>01986C59E4883367</code></td>
<td><code>01109B5536F43467</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>
@ -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>28721A8EC4CD99F8A9B95BDB5A5FD830</code></td>
<td><code>DBD8C65A8B8DD075E7F955693B65DD5D</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>717F48CF4634E207D321B7A6A0503982</code></td>
<td><code>863C64439D30AC3C57173BBC88FF8CC2</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce_hash1</td>
<td>56, 16</td>
<td><code>057A67C6690FDF67B2F14927FEA2E322</code></td>
<td><code>E08AA87970AF59C85123FFBF88BEB316</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

@ -1001,11 +1001,11 @@
</tr>
<tr>
<td><a href="/method/messages.viewSponsoredMessage">messages.viewSponsoredMessage</a></td>
<td> </td>
<td>Mark a specific <a href="/api/sponsored-messages">sponsored message »</a> as read</td>
</tr>
<tr>
<td><a href="/method/messages.clickSponsoredMessage">messages.clickSponsoredMessage</a></td>
<td> </td>
<td>Informs the server that the user has either:<br><br>- Clicked on a link in the <a href="/api/sponsored-messages">sponsored message</a><br>- Has opened a sponsored chat or a sponsored website via the associated button<br>- Has opened the sponsored chat via the sponsored message name, the sponsored message photo, or a mention in the sponsored message</td>
</tr>
</tbody>
</table></div>

View file

@ -96,7 +96,7 @@
<tbody>
<tr>
<td><a href="/method/messages.reportSponsoredMessage">messages.reportSponsoredMessage</a></td>
<td> </td>
<td>Report a <a href="/api/sponsored-messages">sponsored message »</a>, see <a href="/api/sponsored-messages#reporting-sponsored-messages">here »</a> for more info on the full flow.</td>
</tr>
</tbody>
</table>

View file

@ -91,7 +91,7 @@
<tbody>
<tr>
<td><a href="/method/messages.getSponsoredMessages">messages.getSponsoredMessages</a></td>
<td> </td>
<td>Get a list of <a href="/api/sponsored-messages">sponsored messages for a peer, see here »</a> for more info.</td>
</tr>
</tbody>
</table></div>