Update content of files

This commit is contained in:
GitHub Action 2024-07-18 18:15:48 +00:00
parent d2bac2337a
commit cced1c9824
11 changed files with 272 additions and 316 deletions

View file

@ -126,8 +126,8 @@
<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/invokeWithGooglePlayIntegrity">invokeWithGooglePlayIntegrity</a> - </li>
<li>Added <a href="/method/invokeWithApnsSecret">invokeWithApnsSecret</a> - </li>
<li>Added <a href="/method/invokeWithGooglePlayIntegrity">invokeWithGooglePlayIntegrity</a> - Official clients only, invoke with Google Play Integrity token.</li>
<li>Added <a href="/method/invokeWithApnsSecret">invokeWithApnsSecret</a> - Official clients only, invoke with Apple push verification.</li>
<li>Added <a href="/method/messages.getAvailableEffects">messages.getAvailableEffects</a> - Fetch the full list of usable <a href="/api/effects">animated message effects »</a>.</li>
<li>Added <a href="/method/channels.searchPosts">channels.searchPosts</a> - Globally search for posts from public <a href="/api/channel">channels »</a> (<em>including</em> those we aren't a member of) containing a specific hashtag.</li>
</ul>
@ -217,7 +217,7 @@
</ul>
<h5><a class="anchor" href="#new-constructors" id="new-constructors" name="new-constructors"><i class="anchor-icon"></i></a>New Constructors</h5>
<ul>
<li>Added <a href="/constructor/webPageAttributeStickerSet">webPageAttributeStickerSet</a> - </li>
<li>Added <a href="/constructor/webPageAttributeStickerSet">webPageAttributeStickerSet</a> - Contains info about a <a href="/api/stickers">stickerset »</a>, for a <a href="/constructor/webPage">webPage</a> preview of a <a href="/api/links#stickerset-links">stickerset deep link »</a> (the <a href="/constructor/webPage">webPage</a> will have a <code>type</code> of <code>telegram_stickerset</code>).</li>
<li>Added <a href="/constructor/reactionNotificationsFromContacts">reactionNotificationsFromContacts</a> - Receive notifications about reactions made only by our contacts.</li>
<li>Added <a href="/constructor/reactionNotificationsFromAll">reactionNotificationsFromAll</a> - Receive notifications about reactions made by any user.</li>
<li>Added <a href="/constructor/reactionsNotifySettings">reactionsNotifySettings</a> - Reaction notification settings, see <a href="/api/reactions#notifications-about-reactions">here »</a> for more info.</li>
@ -572,7 +572,7 @@
<h4><a class="anchor" href="#schema-changes" id="schema-changes" name="schema-changes"><i class="anchor-icon"></i></a>Schema changes</h4>
<h5><a class="anchor" href="#new-methods" id="new-methods" name="new-methods"><i class="anchor-icon"></i></a>New Methods</h5>
<ul>
<li>Added <a href="/method/messages.getOutboxReadDate">messages.getOutboxReadDate</a> - </li>
<li>Added <a href="/method/messages.getOutboxReadDate">messages.getOutboxReadDate</a> - Get the exact read date of one of our messages, sent to a private chat with another user.</li>
<li>Added <a href="/method/users.getIsPremiumRequiredToContact">users.getIsPremiumRequiredToContact</a> - Check whether we can write to the specified user (non-<a href="/api/premium">Premium</a> users only), see <a href="/api/privacy#require-premium-for-new-non-contact-users">here »</a> for more info on the full flow.</li>
<li>Added <a href="/method/channels.setBoostsToUnblockRestrictions">channels.setBoostsToUnblockRestrictions</a> - Admins with <a href="/constructor/chatAdminRights">ban_users admin rights »</a> may allow users that apply a certain number of <a href="/api/boost">booosts »</a> to the group to bypass <a href="/method/channels.toggleSlowMode">slow mode »</a> and <a href="/api/rights#default-rights">other »</a> supergroup restrictions, see <a href="/api/boost#bypass-slowmode-and-chat-restrictions">here »</a> for more info.</li>
<li>Added <a href="/method/channels.setEmojiStickers">channels.setEmojiStickers</a> - Set a <a href="/api/custom-emoji">custom emoji stickerset</a> for supergroups. Only usable after reaching at least the <a href="/api/boost">boost level »</a> specified in the <a href="/api/config#group-emoji-stickers-level-min"><code>group_emoji_stickers_level_min</code> »</a> config parameter.</li>
@ -584,7 +584,7 @@
</ul>
<h5><a class="anchor" href="#new-constructors" id="new-constructors" name="new-constructors"><i class="anchor-icon"></i></a>New Constructors</h5>
<ul>
<li>Added <a href="/constructor/outboxReadDate">outboxReadDate</a> - </li>
<li>Added <a href="/constructor/outboxReadDate">outboxReadDate</a> - Exact read date of a private message we sent to another user.</li>
<li>Added <a href="/constructor/messageActionBoostApply">messageActionBoostApply</a> - Some <a href="/api/boost">boosts »</a> were applied to the channel or supergroup.</li>
<li>Added <a href="/constructor/channelAdminLogEventActionChangeEmojiStickerSet">channelAdminLogEventActionChangeEmojiStickerSet</a> - The supergroup's <a href="/api/boost#setting-a-custom-emoji-stickerset-for-supergroups">custom emoji stickerset</a> was changed.</li>
</ul>

View file

@ -89,7 +89,7 @@
<tr>
<td><strong>hide_read_marks</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.3?<a href="/constructor/true">true</a></td>
<td>If set, (only) users that cannot see <em>our</em> exact last online date due to the current value of the <a href="/constructor/inputPrivacyKeyStatusTimestamp">inputPrivacyKeyStatusTimestamp</a> key will receive a <code>403 USER_PRIVACY_RESTRICTED</code> error when invoking <a href="/method/messages.getOutboxReadDate">messages.getOutboxReadDate</a> to fetch the exact read date of one of their messages. <br>The <a href="/constructor/userFull">userFull</a>.<code>read_dates_private</code> flag will be set for users that have this flag enabled.</td>
<td>If this flag is set, the <a href="/constructor/inputPrivacyKeyStatusTimestamp">inputPrivacyKeyStatusTimestamp</a> key will also apply to the ability to use <a href="/method/messages.getOutboxReadDate">messages.getOutboxReadDate</a> on messages sent to us. <br>Meaning, users that cannot see <em>our</em> exact last online date due to the current value of the <a href="/constructor/inputPrivacyKeyStatusTimestamp">inputPrivacyKeyStatusTimestamp</a> key will receive a <code>403 USER_PRIVACY_RESTRICTED</code> error when invoking <a href="/method/messages.getOutboxReadDate">messages.getOutboxReadDate</a> to fetch the exact read date of a message they sent to us. <br>The <a href="/constructor/userFull">userFull</a>.<code>read_dates_private</code> flag will be set for users that have this flag enabled.</td>
</tr>
<tr>
<td><strong>new_noncontact_peers_require_premium</strong></td>
@ -107,6 +107,11 @@
<p>Whether people will be able to see our exact last online timestamp.</p>
<p>Note that if <em>we</em> decide to hide our exact last online timestamp to someone <strong>and</strong> we do not have a <a href="/api/premium">Premium</a> subscription, we won't be able to see the exact last online timestamp of <em>any</em> user, including those that do share it with us.</p>
<h4><a class="anchor" href="#messagesgetoutboxreaddate" id="messagesgetoutboxreaddate" name="messagesgetoutboxreaddate"><i class="anchor-icon"></i></a><a href="/method/messages.getOutboxReadDate">messages.getOutboxReadDate</a></h4>
<p>Get the exact read date of one of our messages, sent to a private chat with another user.</p>
<p>Can be only done for private outgoing messages not older than <a href="/api/config#pm-read-date-expire-period">appConfig.pm_read_date_expire_period »</a>.</p>
<p>If the <code>peer</code>'s <a href="/constructor/userFull">userFull</a>.<code>read_dates_private</code> flag is set, we will not be able to fetch the exact read date of messages we send to them, and a <code>USER_PRIVACY_RESTRICTED</code> RPC error will be emitted.<br>
The exact read date of messages might still be unavailable for other reasons, see <a href="/constructor/globalPrivacySettings">here »</a> for more info.<br>
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="#userfull" id="userfull" name="userfull"><i class="anchor-icon"></i></a><a href="/constructor/userFull">userFull</a></h4>
<p>Extended user info</p>
<h4><a class="anchor" href="#usersgetispremiumrequiredtocontact" id="usersgetispremiumrequiredtocontact" name="usersgetispremiumrequiredtocontact"><i class="anchor-icon"></i></a><a href="/method/users.getIsPremiumRequiredToContact">users.getIsPremiumRequiredToContact</a></h4>

View file

@ -188,7 +188,7 @@
</tr>
<tr>
<td><strong>contact_require_premium</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.29?<a href="/constructor/true">true</a></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags2</a>.10?<a href="/constructor/true">true</a></td>
<td>If set, we can only write to this user if they have already sent some messages to us, if we are subscribed to <a href="/api/premium">Telegram Premium</a>, or if they're a mutual contact (<a href="/constructor/user">user</a>.<code>mutual_contact</code>). <br>All the secondary conditions listed above must be checked separately to verify whether we can still write to the user, even if this flag is set (i.e. a mutual contact will have this flag set even if we can still write to them, and so on...); to avoid doing these extra checks if we haven't yet cached all the required information (for example while displaying the chat list in the sharing UI) the <a href="/method/users.getIsPremiumRequiredToContact">users.getIsPremiumRequiredToContact</a> method may be invoked instead, passing the list of users currently visible in the UI, returning a list of booleans that directly specify whether we can or cannot write to each user. <br>To set this flag for ourselves invoke <a href="/method/account.setGlobalPrivacySettings">account.setGlobalPrivacySettings</a>, setting the <code>settings.new_noncontact_peers_require_premium</code> flag.</td>
</tr>
<tr>
@ -294,6 +294,14 @@
<p>Telegram allows users to specify granular privacy settings, choosing which users can or can't interact with them in certain ways.</p>
<h4><a class="anchor" href="#stories" id="stories" name="stories"><i class="anchor-icon"></i></a><a href="/api/stories">Stories</a></h4>
<p>Telegram users and channels can easily post and view stories through the API.</p>
<h4><a class="anchor" href="#telegram-premium" id="telegram-premium" name="telegram-premium"><i class="anchor-icon"></i></a><a href="/api/premium">Telegram Premium</a></h4>
<p>Telegram Premium is an optional subscription service that unlocks additional exclusive client-side and API-side features, while helping support the development of the app.</p>
<h4><a class="anchor" href="#user" id="user" name="user"><i class="anchor-icon"></i></a><a href="/constructor/user">user</a></h4>
<p>Indicates info about a certain user</p>
<h4><a class="anchor" href="#usersgetispremiumrequiredtocontact" id="usersgetispremiumrequiredtocontact" name="usersgetispremiumrequiredtocontact"><i class="anchor-icon"></i></a><a href="/method/users.getIsPremiumRequiredToContact">users.getIsPremiumRequiredToContact</a></h4>
<p>Check whether we can write to the specified user (non-<a href="/api/premium">Premium</a> users only), see <a href="/api/privacy#require-premium-for-new-non-contact-users">here »</a> for more info on the full flow.</p>
<h4><a class="anchor" href="#accountsetglobalprivacysettings" id="accountsetglobalprivacysettings" name="accountsetglobalprivacysettings"><i class="anchor-icon"></i></a><a href="/method/account.setGlobalPrivacySettings">account.setGlobalPrivacySettings</a></h4>
<p>Set global privacy settings</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="#userfull" id="userfull" name="userfull"><i class="anchor-icon"></i></a><a href="/constructor/userFull">userFull</a></h4>

View file

@ -134,7 +134,7 @@
<tr>
<td><strong>read_dates_private</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.30?<a href="/constructor/true">true</a></td>
<td>If set, we cannot fetch the exact read date of messages we send to this user using <a href="/method/messages.getOutboxReadDate">messages.getOutboxReadDate</a>. <br>The exact read date of messages might still be unavailable for other reasons, see <a href="/constructor/globalPrivacySettings">here »</a> for more info. <br>To set this flag for ourselves invoke <a href="/method/account.setGlobalPrivacySettings">account.setGlobalPrivacySettings</a>, setting the <code>settings.hide_read_marks</code> flag.</td>
<td>If set, we cannot fetch the exact read date of messages we send to this user using <a href="/method/messages.getOutboxReadDate">messages.getOutboxReadDate</a>. <br>The exact read date of messages might still be unavailable for other reasons, see <a href="/method/messages.getOutboxReadDate">here »</a> for more info. <br>To set this flag for ourselves invoke <a href="/method/account.setGlobalPrivacySettings">account.setGlobalPrivacySettings</a>, setting the <code>settings.hide_read_marks</code> flag.</td>
</tr>
<tr>
<td><strong>flags2</strong></td>
@ -307,8 +307,11 @@
<h4><a class="anchor" href="#accountsetglobalprivacysettings" id="accountsetglobalprivacysettings" name="accountsetglobalprivacysettings"><i class="anchor-icon"></i></a><a href="/method/account.setGlobalPrivacySettings">account.setGlobalPrivacySettings</a></h4>
<p>Set global privacy settings</p>
<h4><a class="anchor" href="#messagesgetoutboxreaddate" id="messagesgetoutboxreaddate" name="messagesgetoutboxreaddate"><i class="anchor-icon"></i></a><a href="/method/messages.getOutboxReadDate">messages.getOutboxReadDate</a></h4>
<h4><a class="anchor" href="#globalprivacysettings" id="globalprivacysettings" name="globalprivacysettings"><i class="anchor-icon"></i></a><a href="/constructor/globalPrivacySettings">globalPrivacySettings</a></h4>
<p>Global privacy settings</p>
<p>Get the exact read date of one of our messages, sent to a private chat with another user.</p>
<p>Can be only done for private outgoing messages not older than <a href="/api/config#pm-read-date-expire-period">appConfig.pm_read_date_expire_period »</a>.</p>
<p>If the <code>peer</code>'s <a href="/constructor/userFull">userFull</a>.<code>read_dates_private</code> flag is set, we will not be able to fetch the exact read date of messages we send to them, and a <code>USER_PRIVACY_RESTRICTED</code> RPC error will be emitted.<br>
The exact read date of messages might still be unavailable for other reasons, see <a href="/constructor/globalPrivacySettings">here »</a> for more info.<br>
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="#pinned-messages" id="pinned-messages" name="pinned-messages"><i class="anchor-icon"></i></a><a href="/api/pin">Pinned messages</a></h4>

View file

@ -4,10 +4,10 @@
<meta charset="utf-8">
<title>webPageAttributeStickerSet</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="description" content="Contains info about a stickerset », for a webPage preview of a stickerset deep link » (the webPage will have a type of ">
<meta property="description" content="Contains info about a stickerset », for a webPage preview of a stickerset deep link » (the webPage will have a type of telegram_stickerset).">
<meta property="og:title" content="webPageAttributeStickerSet">
<meta property="og:image" content="">
<meta property="og:description" content="Contains info about a stickerset », for a webPage preview of a stickerset deep link » (the webPage will have a type of ">
<meta property="og:description" content="Contains info about a stickerset », for a webPage preview of a stickerset deep link » (the webPage will have a type of telegram_stickerset).">
<link rel="icon" type="image/svg+xml" href="/img/website_icon.svg?4">
<link rel="apple-touch-icon" sizes="180x180" href="/img/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/img/favicon-32x32.png">
@ -42,7 +42,7 @@
<div class="dev_page_bread_crumbs"><ul class="breadcrumb clearfix"><li><a href="/api" >API</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/schema" >TL-schema</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/constructor/webPageAttributeStickerSet" >webPageAttributeStickerSet</a></li></ul></div>
<h1 id="dev_page_title">webPageAttributeStickerSet</h1>
<div id="dev_page_content"><p>Contains info about a <a href="/api/stickers">stickerset »</a>, for a <a href="/constructor/webPage">webPage</a> preview of a <a href="/api/links#stickerset-links">stickerset deep link »</a> (the <a href="/constructor/webPage">webPage</a> will have a <code>type</code> of <code>telegram_stickerset</code>). </p>
<div id="dev_page_content"><p>Contains info about a <a href="/api/stickers">stickerset »</a>, for a <a href="/constructor/webPage">webPage</a> preview of a <a href="/api/links#stickerset-links">stickerset deep link »</a> (the <a href="/constructor/webPage">webPage</a> will have a <code>type</code> of <code>telegram_stickerset</code>).</p>
<p><div class="clearfix">
<ul class="dev_layer_select slightly-pull-right nav nav-pills">
<li class="dropdown">
@ -89,7 +89,16 @@
</tbody>
</table>
<h3><a class="anchor" href="#type" id="type" name="type"><i class="anchor-icon"></i></a>Type</h3>
<p><a href="/type/WebPageAttribute">WebPageAttribute</a></p></div>
<p><a href="/type/WebPageAttribute">WebPageAttribute</a></p>
<h3><a class="anchor" href="#related-pages" id="related-pages" name="related-pages"><i class="anchor-icon"></i></a>Related pages</h3>
<h4><a class="anchor" href="#custom-emojis" id="custom-emojis" name="custom-emojis"><i class="anchor-icon"></i></a><a href="/api/custom-emoji">Custom emojis</a></h4>
<p>Telegram allows including animated and static custom emojis inside of messages.</p>
<h4><a class="anchor" href="#stickers" id="stickers" name="stickers"><i class="anchor-icon"></i></a><a href="/api/stickers">Stickers</a></h4>
<p>Telegram clients support displaying static and animated stickers.</p>
<h4><a class="anchor" href="#webpage" id="webpage" name="webpage"><i class="anchor-icon"></i></a><a href="/constructor/webPage">webPage</a></h4>
<p>Webpage preview</p>
<h4><a class="anchor" href="#deep-links" id="deep-links" name="deep-links"><i class="anchor-icon"></i></a><a href="/api/links">Deep links</a></h4>
<p>Telegram clients must handle special tg:// and t.me deep links encountered in messages, link entities and in other apps by registering OS handlers.</p></div>
</div>

View file

@ -4,38 +4,10 @@
<meta charset="utf-8">
<title>invokeWithGooglePlayIntegrity</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="description" content="Parameters
Name
Type
Description
nonce
string
 
token
string
 
query
&#33;X
 
Result
The type returned by the invoked method.…">
<meta property="description" content="Official clients only, invoke with Google Play Integrity token.">
<meta property="og:title" content="invokeWithGooglePlayIntegrity">
<meta property="og:image" content="">
<meta property="og:description" content="Parameters
Name
Type
Description
nonce
string
 
token
string
 
query
&#33;X
 
Result
The type returned by the invoked method.…">
<meta property="og:description" content="Official clients only, invoke with Google Play Integrity token.">
<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 @@ The type returned by the invoked 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/invokeWithGooglePlayIntegrity" >invokeWithGooglePlayIntegrity</a></li></ul></div>
<h1 id="dev_page_title">invokeWithGooglePlayIntegrity</h1>
<div id="dev_page_content"><p><div class="clearfix">
<div id="dev_page_content"><p>Official clients only, invoke with Google Play Integrity token.</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 181 <b class="caret"></b></a>
@ -97,17 +70,17 @@ The type returned by the invoked method.…">
<tr>
<td><strong>nonce</strong></td>
<td style="text-align: center;"><a href="/type/string">string</a></td>
<td> </td>
<td>Nonce.</td>
</tr>
<tr>
<td><strong>token</strong></td>
<td style="text-align: center;"><a href="/type/string">string</a></td>
<td> </td>
<td>Token.</td>
</tr>
<tr>
<td><strong>query</strong></td>
<td style="text-align: center;">!X</td>
<td> </td>
<td>Query.</td>
</tr>
</tbody>
</table>

View file

@ -4,40 +4,12 @@
<meta charset="utf-8">
<title>messages.getOutboxReadDate</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="description" content="Parameters
Name
Type
Description
peer
InputPeer
 
msg_id
int
 
Result
OutboxReadDate
Possible errors
Code
Type
Description…">
<meta property="description" content="Get the exact read date of one of our messages, sent to a private chat with another user.
Can be only done for private outgoing…">
<meta property="og:title" content="messages.getOutboxReadDate">
<meta property="og:image" content="">
<meta property="og:description" content="Parameters
Name
Type
Description
peer
InputPeer
 
msg_id
int
 
Result
OutboxReadDate
Possible errors
Code
Type
Description…">
<meta property="og:description" content="Get the exact read date of one of our messages, sent to a private chat with another user.
Can be only done for private outgoing…">
<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">
@ -72,7 +44,10 @@ Description…">
<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.getOutboxReadDate" >messages.getOutboxReadDate</a></li></ul></div>
<h1 id="dev_page_title">messages.getOutboxReadDate</h1>
<div id="dev_page_content"><p><div class="clearfix">
<div id="dev_page_content"><p>Get the exact read date of one of our messages, sent to a private chat with another user. </p>
<p>Can be only done for private outgoing messages not older than <a href="/api/config#pm-read-date-expire-period">appConfig.pm_read_date_expire_period »</a>. </p>
<p>If the <code>peer</code>'s <a href="/constructor/userFull">userFull</a>.<code>read_dates_private</code> flag is set, we will not be able to fetch the exact read date of messages we send to them, and a <code>USER_PRIVACY_RESTRICTED</code> RPC error will be emitted. <br>The exact read date of messages might still be unavailable for other reasons, see <a href="/constructor/globalPrivacySettings">here »</a> for more info. <br>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>
<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 181 <b class="caret"></b></a>
@ -100,12 +75,12 @@ Description…">
<tr>
<td><strong>peer</strong></td>
<td style="text-align: center;"><a href="/type/InputPeer">InputPeer</a></td>
<td> </td>
<td>The user to whom we sent the message.</td>
</tr>
<tr>
<td><strong>msg_id</strong></td>
<td style="text-align: center;"><a href="/type/int">int</a></td>
<td> </td>
<td>The message ID.</td>
</tr>
</tbody>
</table>

View file

@ -209,11 +209,11 @@ Look for updates of telegram&#39;s terms of service…">
</tr>
<tr>
<td><a href="/method/invokeWithGooglePlayIntegrity">invokeWithGooglePlayIntegrity</a></td>
<td> </td>
<td>Official clients only, invoke with Google Play Integrity token.</td>
</tr>
<tr>
<td><a href="/method/invokeWithApnsSecret">invokeWithApnsSecret</a></td>
<td> </td>
<td>Official clients only, invoke with Apple push verification.</td>
</tr>
</tbody>
</table>
@ -3624,7 +3624,7 @@ Look for updates of telegram&#39;s terms of service…">
<tbody>
<tr>
<td><a href="/method/messages.getOutboxReadDate">messages.getOutboxReadDate</a></td>
<td> </td>
<td>Get the exact read date of one of our messages, sent to a private chat with another user.<br><br>Can be only done for private outgoing messages not older than <a href="/api/config#pm-read-date-expire-period">appConfig.pm_read_date_expire_period »</a>.<br><br>If the <code>peer</code>'s <a href="/constructor/userFull">userFull</a>.<code>read_dates_private</code> flag is set, we will not be able to fetch the exact read date of messages we send to them, and a <code>USER_PRIVACY_RESTRICTED</code> RPC error will be emitted. <br>The exact read date of messages might still be unavailable for other reasons, see <a href="/constructor/globalPrivacySettings">here »</a> for more info. <br>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.</td>
</tr>
<tr>
<td><a href="/method/messages.toggleDialogFilterTags">messages.toggleDialogFilterTags</a></td>

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 BC 76 09 00 AF 4D 99 66
0010 | 14 00 00 00 F1 8E 7E BE A6 B2 F8 1F 8F DB 3D 17
0020 | 33 82 A6 28 5E 43 3C 5E</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 54 FF 09 00 79 5A 99 66
0010 | 14 00 00 00 F1 8E 7E BE 66 1D B0 4F 07 59 BA 01
0020 | 12 AF 0F 39 23 A2 49 6C</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>BC760900AF4D9966</code></td>
<td><code>54FF0900795A9966</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>A6B2F81F8FDB3D173382A6285E433C5E</code></td>
<td><code>661DB04F0759BA0112AF0F3923A2496C</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 48 04 FE AF 4D 99 66
0010 | 7C 00 00 00 63 24 16 05 A6 B2 F8 1F 8F DB 3D 17
0020 | 33 82 A6 28 5E 43 3C 5E 57 23 72 FC D6 8B D9 7F
0030 | 39 4B A8 98 AB 19 56 DE 08 19 69 25 89 F3 72 50
0040 | 2F 00 00 00 15 C4 B5 1C 03 00 00 00 A5 B7 F7 09
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 D8 D9 E7 79 5A 99 66
0010 | 9C 00 00 00 63 24 16 05 66 1D B0 4F 07 59 BA 01
0020 | 12 AF 0F 39 23 A2 49 6C 48 E1 4C F6 49 34 95 00
0030 | BF 9F 7D B9 A9 72 79 46 08 19 21 50 1D 5D 3E A3
0040 | CF 00 00 00 15 C4 B5 1C 03 00 00 00 A5 B7 F7 09
0050 | 35 5F C3 0B 21 6B E8 6C 02 2B B4 C3 85 FD 64 DE
0060 | 85 1D 9D D0</code></pre>
<p>Payload (de)serialization:</p>
@ -132,13 +132,13 @@
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>014804FEAF4D9966</code></td>
<td><code>01D8D9E7795A9966</code></td>
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() &lt;&lt; 32) + (N*4)</td>
</tr>
<tr>
<td>message_length</td>
<td>16, 4</td>
<td><code>7C000000</code> (124 in decimal)</td>
<td><code>9C000000</code> (156 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -150,19 +150,19 @@
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>A6B2F81F8FDB3D173382A6285E433C5E</code></td>
<td><code>661DB04F0759BA0112AF0F3923A2496C</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>572372FCD68BD97F394BA898AB1956DE</code></td>
<td><code>48E14CF649349500BF9F7DB9A9727946</code></td>
<td>Server-generated random number</td>
</tr>
<tr>
<td>pq</td>
<td>56, 12</td>
<td><code>0819692589F372502F000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1831035997927919663</td>
<td><code>081921501D5D3EA3CF000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1810816612228309967</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 = 1831035997927919663</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>1831035997927919663 = 1065167549 * 1719012187</code></p>
<pre><code>p = 1065167549
q = 1719012187</code></pre>
<pre><code>pq = 1810816612228309967</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>1810816612228309967 = 1033917223 * 1751413529</code></p>
<pre><code>p = 1033917223
q = 1751413529</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 19 69 25 89 F3 72 50 2F 00 00 00
0010 | 04 3F 7D 2A BD 00 00 00 04 66 76 0B 5B 00 00 00
0020 | A6 B2 F8 1F 8F DB 3D 17 33 82 A6 28 5E 43 3C 5E
0030 | 57 23 72 FC D6 8B D9 7F 39 4B A8 98 AB 19 56 DE
0040 | 45 66 5B FB DA BB 71 20 49 33 58 6A D5 1B 7D 65
0050 | 96 CD AA 76 99 E2 2A 3E A8 0A F2 EF 1C 6D 78 EF
<pre><code>0000 | 95 5F F5 A9 08 19 21 50 1D 5D 3E A3 CF 00 00 00
0010 | 04 3D A0 53 27 00 00 00 04 68 64 73 19 00 00 00
0020 | 66 1D B0 4F 07 59 BA 01 12 AF 0F 39 23 A2 49 6C
0030 | 48 E1 4C F6 49 34 95 00 BF 9F 7D B9 A9 72 79 46
0040 | 3E 94 B4 C7 15 50 62 E6 79 67 69 11 C8 FC BD BC
0050 | 95 A7 51 29 76 08 24 0F 37 85 4B D2 EE 49 FA 54
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 = 1719012187</code></pre>
<tr>
<td>pq</td>
<td>4, 12</td>
<td><code>0819692589F372502F000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1831035997927919663</td>
<td><code>081921501D5D3EA3CF000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1810816612228309967</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>043F7D2ABD000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1065167549</td>
<td><code>043DA05327000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1033917223</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>0466760B5B000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1719012187</td>
<td><code>0468647319000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1751413529</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>A6B2F81F8FDB3D173382A6285E433C5E</code></td>
<td><code>661DB04F0759BA0112AF0F3923A2496C</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>48, 16</td>
<td><code>572372FCD68BD97F394BA898AB1956DE</code></td>
<td><code>48E14CF649349500BF9F7DB9A9727946</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce</td>
<td>64, 32</td>
<td><code>45665BFBDABB71204933586AD51B7D65</code> <code>96CDAA7699E22A3EA80AF2EF1C6D78EF</code></td>
<td><code>3E94B4C7155062E679676911C8FCBDBC</code> <code>95A751297608240F37854BD2EE49FA54</code></td>
<td>Client-generated random number</td>
</tr>
<tr>
@ -291,39 +291,39 @@ q = 1719012187</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 = 955FF5A90819692589F372502F000000043F7D2ABD0000000466760B5B000000A6B2F81F8FDB3D173382A6285E433C5E572372FCD68BD97F394BA898AB1956DE45665BFBDABB71204933586AD51B7D6596CDAA7699E22A3EA80AF2EF1C6D78EF02000000
random_padding_bytes = 5AD52E434950F61F04ECE6113D993F76FD9B11EAC7204ACCA6A11A9EAC03D1A0FAEDA729CB0F870B97FDFBFD93A090CE4AE044850CDB1A7EB4393018354D8AC3D7312F9E5363DD6FD8EB762AD1E717D830F11C1031CB2571084EB371</code></pre>
<pre><code>data = 955FF5A9081921501D5D3EA3CF000000043DA053270000000468647319000000661DB04F0759BA0112AF0F3923A2496C48E14CF649349500BF9F7DB9A97279463E94B4C7155062E679676911C8FCBDBC95A751297608240F37854BD2EE49FA5402000000
random_padding_bytes = 31BFA2AA3B357FDD3EF1EA929237378B200028E8B0FDC23E2EF673A3094EC21A83792D7FF69B33BFBEAB21F45027437CF1F0E78FF5497A14237020FD926EA26A242F5EF3F0C9040D56D188093366EFB6EDDB66D14B649F6F37C98BD2</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 = 60D52FF3615070E9CB98A925B8FBE3D88F56022CD55253064B6D1F579B4CF6BF0A9A55CED20CB1AC6D91C801FF3C8AE5F88B164A7F98BB6AA5B0764D4B4F21B1031271490CEC627D3F8B171AC078090E4F8545A48557E6A2DB4A7F1937B9197DEE3B53C4494B23183DDE61C0FF9B5757A96F9916E89DE30279E815877C11EF8B659B0E531DA5306695C78B8ABA9EF329D8F12CEB810CC338C287D2DE70347401225BB8A042376B4662A2A103D5C7ED317B2A49FBF3409F10A8DD8988EA128D40637BC66102D0965EA5532FBCFE5DBF022A4889605CF7D4A45D62D0CE5C2471DFABED92DD4DC3FAFB6E6DFFFF41FB7B58129A27F9C09292DED23E1BE058DDBC0D</code></pre>
<pre><code>encrypted_data = 9410F5D93A9A4109250C5365EDA96FB3D5D5300941DE02D63C5C2F17FF90A38A8A77B9E0A39AFBDA45112C814007A8F5B4EB950F6745CC9797542C7B619DC6CE2E81CB19A2C63ED565C54BDAABE1E22584AFA3E1FFB50B625A756A64AD00F11511C41C70A1F27E9E3CFCE86581FBCBE32DAB4A756383234BAA3DD2C5B76D68E58E2997D60D9099722D866784AFD2788F1362B7A77B60929F6AF7264121C688EFC2045E1AAA158A29C376236B6F1CB97812BAA14C354DC03C567E566A221E598FC1FADA42AE3239E6E572EDACCD2EADD99B39C573DD015BF5872B1EC41E4C9DB12230AD5CF0B5B1EB9D92AD832B1CD58A43B46CB9A0B88475A86276C7E5FFD1B3</code></pre>
<!-- end p_q_inner_data_output -->
<p>The length of the final string is 256 bytes.</p>
<h5><a class="anchor" href="#5-send-req-dh-params-query-with-generated-encrypted-data" id="5-send-req-dh-params-query-with-generated-encrypted-data" name="5-send-req-dh-params-query-with-generated-encrypted-data"><i class="anchor-icon"></i></a>5) Send req_DH_params query with generated <code>encrypted_data</code></h5>
<!-- start req_DH_params -->
<p>Sent payload (excluding transport headers/trailers):</p>
<pre><code>0000 | 00 00 00 00 00 00 00 00 20 C0 03 00 B0 4D 99 66
0010 | 40 01 00 00 BE E4 12 D7 A6 B2 F8 1F 8F DB 3D 17
0020 | 33 82 A6 28 5E 43 3C 5E 57 23 72 FC D6 8B D9 7F
0030 | 39 4B A8 98 AB 19 56 DE 04 3F 7D 2A BD 00 00 00
0040 | 04 66 76 0B 5B 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 60 D5 2F F3 61 50 70 E9 CB 98 A9 25
0060 | B8 FB E3 D8 8F 56 02 2C D5 52 53 06 4B 6D 1F 57
0070 | 9B 4C F6 BF 0A 9A 55 CE D2 0C B1 AC 6D 91 C8 01
0080 | FF 3C 8A E5 F8 8B 16 4A 7F 98 BB 6A A5 B0 76 4D
0090 | 4B 4F 21 B1 03 12 71 49 0C EC 62 7D 3F 8B 17 1A
00A0 | C0 78 09 0E 4F 85 45 A4 85 57 E6 A2 DB 4A 7F 19
00B0 | 37 B9 19 7D EE 3B 53 C4 49 4B 23 18 3D DE 61 C0
00C0 | FF 9B 57 57 A9 6F 99 16 E8 9D E3 02 79 E8 15 87
00D0 | 7C 11 EF 8B 65 9B 0E 53 1D A5 30 66 95 C7 8B 8A
00E0 | BA 9E F3 29 D8 F1 2C EB 81 0C C3 38 C2 87 D2 DE
00F0 | 70 34 74 01 22 5B B8 A0 42 37 6B 46 62 A2 A1 03
0100 | D5 C7 ED 31 7B 2A 49 FB F3 40 9F 10 A8 DD 89 88
0110 | EA 12 8D 40 63 7B C6 61 02 D0 96 5E A5 53 2F BC
0120 | FE 5D BF 02 2A 48 89 60 5C F7 D4 A4 5D 62 D0 CE
0130 | 5C 24 71 DF AB ED 92 DD 4D C3 FA FB 6E 6D FF FF
0140 | 41 FB 7B 58 12 9A 27 F9 C0 92 92 DE D2 3E 1B E0
0150 | 58 DD BC 0D</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 04 E6 03 00 7A 5A 99 66
0010 | 40 01 00 00 BE E4 12 D7 66 1D B0 4F 07 59 BA 01
0020 | 12 AF 0F 39 23 A2 49 6C 48 E1 4C F6 49 34 95 00
0030 | BF 9F 7D B9 A9 72 79 46 04 3D A0 53 27 00 00 00
0040 | 04 68 64 73 19 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 94 10 F5 D9 3A 9A 41 09 25 0C 53 65
0060 | ED A9 6F B3 D5 D5 30 09 41 DE 02 D6 3C 5C 2F 17
0070 | FF 90 A3 8A 8A 77 B9 E0 A3 9A FB DA 45 11 2C 81
0080 | 40 07 A8 F5 B4 EB 95 0F 67 45 CC 97 97 54 2C 7B
0090 | 61 9D C6 CE 2E 81 CB 19 A2 C6 3E D5 65 C5 4B DA
00A0 | AB E1 E2 25 84 AF A3 E1 FF B5 0B 62 5A 75 6A 64
00B0 | AD 00 F1 15 11 C4 1C 70 A1 F2 7E 9E 3C FC E8 65
00C0 | 81 FB CB E3 2D AB 4A 75 63 83 23 4B AA 3D D2 C5
00D0 | B7 6D 68 E5 8E 29 97 D6 0D 90 99 72 2D 86 67 84
00E0 | AF D2 78 8F 13 62 B7 A7 7B 60 92 9F 6A F7 26 41
00F0 | 21 C6 88 EF C2 04 5E 1A AA 15 8A 29 C3 76 23 6B
0100 | 6F 1C B9 78 12 BA A1 4C 35 4D C0 3C 56 7E 56 6A
0110 | 22 1E 59 8F C1 FA DA 42 AE 32 39 E6 E5 72 ED AC
0120 | CD 2E AD D9 9B 39 C5 73 DD 01 5B F5 87 2B 1E C4
0130 | 1E 4C 9D B1 22 30 AD 5C F0 B5 B1 EB 9D 92 AD 83
0140 | 2B 1C D5 8A 43 B4 6C B9 A0 B8 84 75 A8 62 76 C7
0150 | E5 FF D1 B3</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 = 5AD52E434950F61F04ECE6113D993F76FD9B11EAC7204ACCA6A11A9EA
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>20C00300B04D9966</code></td>
<td><code>04E603007A5A9966</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 = 5AD52E434950F61F04ECE6113D993F76FD9B11EAC7204ACCA6A11A9EA
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>A6B2F81F8FDB3D173382A6285E433C5E</code></td>
<td><code>661DB04F0759BA0112AF0F3923A2496C</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>572372FCD68BD97F394BA898AB1956DE</code></td>
<td><code>48E14CF649349500BF9F7DB9A9727946</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>p</td>
<td>56, 8</td>
<td><code>043F7D2ABD000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1065167549</td>
<td><code>043DA05327000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1033917223</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>0466760B5B000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1719012187</td>
<td><code>0468647319000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1751413529</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 = 5AD52E434950F61F04ECE6113D993F76FD9B11EAC7204ACCA6A11A9EA
<tr>
<td>encrypted_data</td>
<td>80, 260</td>
<td><code>FE00010060D52FF3615070E9CB98A925</code> <code>B8FBE3D88F56022CD55253064B6D1F57</code> <code>9B4CF6BF0A9A55CED20CB1AC6D91C801</code> <code>FF3C8AE5F88B164A7F98BB6AA5B0764D</code> <code>4B4F21B1031271490CEC627D3F8B171A</code> <code>C078090E4F8545A48557E6A2DB4A7F19</code> <code>37B9197DEE3B53C4494B23183DDE61C0</code> <code>FF9B5757A96F9916E89DE30279E81587</code> <code>7C11EF8B659B0E531DA5306695C78B8A</code> <code>BA9EF329D8F12CEB810CC338C287D2DE</code> <code>70347401225BB8A042376B4662A2A103</code> <code>D5C7ED317B2A49FBF3409F10A8DD8988</code> <code>EA128D40637BC66102D0965EA5532FBC</code> <code>FE5DBF022A4889605CF7D4A45D62D0CE</code> <code>5C2471DFABED92DD4DC3FAFB6E6DFFFF</code> <code>41FB7B58129A27F9C09292DED23E1BE0</code><br> <code>58DDBC0D</code></td>
<td><code>FE0001009410F5D93A9A4109250C5365</code> <code>EDA96FB3D5D5300941DE02D63C5C2F17</code> <code>FF90A38A8A77B9E0A39AFBDA45112C81</code> <code>4007A8F5B4EB950F6745CC9797542C7B</code> <code>619DC6CE2E81CB19A2C63ED565C54BDA</code> <code>ABE1E22584AFA3E1FFB50B625A756A64</code> <code>AD00F11511C41C70A1F27E9E3CFCE865</code> <code>81FBCBE32DAB4A756383234BAA3DD2C5</code> <code>B76D68E58E2997D60D9099722D866784</code> <code>AFD2788F1362B7A77B60929F6AF72641</code> <code>21C688EFC2045E1AAA158A29C376236B</code> <code>6F1CB97812BAA14C354DC03C567E566A</code> <code>221E598FC1FADA42AE3239E6E572EDAC</code> <code>CD2EADD99B39C573DD015BF5872B1EC4</code> <code>1E4C9DB12230AD5CF0B5B1EB9D92AD83</code> <code>2B1CD58A43B46CB9A0B88475A86276C7</code><br> <code>E5FFD1B3</code></td>
<td>Value generated above</td>
</tr>
</tbody>
@ -402,47 +402,47 @@ random_padding_bytes = 5AD52E434950F61F04ECE6113D993F76FD9B11EAC7204ACCA6A11A9EA
<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 90 B0 B1 B0 4D 99 66
0010 | DC 02 00 00 5C 07 E8 D0 A6 B2 F8 1F 8F DB 3D 17
0020 | 33 82 A6 28 5E 43 3C 5E 57 23 72 FC D6 8B D9 7F
0030 | 39 4B A8 98 AB 19 56 DE FE 50 02 00 C1 3C 7E AA
0040 | 1A DB 0C C9 0D B1 B7 FF 76 43 6C D2 2D 3B 28 95
0050 | 1D EF A9 08 3D 1F 52 3B 83 DB C2 A5 F3 38 CA B8
0060 | 75 44 B2 30 9E 17 29 AD F7 DF A8 5A 5B 68 95 C1
0070 | 03 81 B1 0F 86 4D 31 84 9A 17 23 D9 49 68 CE D0
0080 | E1 8F E0 57 FA 92 1A 10 F4 7C 6D 11 22 A8 E6 53
0090 | A2 CB 68 7D 0B 47 BB A2 BF 65 DC 11 9D 17 22 EE
00A0 | 8D AB A9 89 B8 ED 02 45 3D D4 E8 59 33 DD 8C 87
00B0 | 99 FE B8 BF 0A 95 2D C9 29 85 D7 D9 B3 1E 7F 75
00C0 | 7A D6 13 FB 48 CF 5F 3E 29 65 57 5D D9 42 2D D0
00D0 | 43 94 87 8B 07 5A CA D3 1B 39 AF 12 C4 04 4D 49
00E0 | 67 90 1F 71 0D DA 37 09 AC E3 71 42 75 9F 97 9B
00F0 | AC 10 F2 90 C6 6B 9E 9C D0 65 10 22 8A 40 4A AD
0100 | 47 00 EA 0A AC C8 DA D1 0A 81 85 64 B9 79 5D 8D
0110 | E7 0E B1 EE CC 2F 58 23 65 FA 4E DE ED AE 3C DB
0120 | CF AC F3 EE AC A6 30 54 D9 0E C1 5B 8C 54 A8 CF
0130 | C9 4F 4D C9 67 BC 6A 11 92 BA 89 70 0B 45 BA CD
0140 | BA 60 32 B1 9E 7E AC B6 6E 01 AD D5 8F 17 0B 9D
0150 | F7 33 EC FF 4C 27 35 95 DA 18 1D A8 5B 44 9A 5B
0160 | 89 7E E4 65 21 F4 CD 51 B1 DD 96 53 FA 95 02 0A
0170 | 54 CC 9E EC DB A2 DE 7B 5C 69 58 40 27 93 37 24
0180 | 82 84 01 D5 B1 7F CB B2 2E B8 60 D6 C4 45 E6 F7
0190 | 86 A0 BE 04 01 60 78 2A 63 9A F3 4B C4 EC 0E E4
01A0 | A3 85 96 C6 F2 F8 E9 8F 44 39 01 CB F8 A3 B9 0C
01B0 | C6 13 3A 7D 7C D1 8B FA D2 D0 DC FE C4 85 D3 A0
01C0 | 2B 60 52 F5 91 B0 3F B6 99 E2 16 9E B8 D7 4A 7C
01D0 | 98 A9 A7 02 13 DD 45 C3 FB 5C 81 0A F7 A9 2C 81
01E0 | 5C A5 0B 58 48 F5 C8 8C D7 4F 87 87 6B 7E 60 11
01F0 | B5 4B 92 BE 8A 24 E8 CD 7F FA EC ED 79 1A D8 4A
0200 | 47 25 B6 2A DA 02 FA 0D F2 33 35 68 C8 E2 CC 0A
0210 | 9E E5 1A 8A 81 EA 70 EE C9 94 F2 76 75 14 15 1F
0220 | 14 69 9D 19 D9 53 F8 FA 8F 80 77 CF 06 C5 8B 47
0230 | CF FA DE 83 A1 81 4E 38 3E C3 F6 63 24 14 C4 BD
0240 | 1D D7 A7 0A 26 A1 95 C9 63 2C 13 58 A2 77 59 AF
0250 | 88 DA 06 5B 5D 95 60 3B EC DD F7 18 D9 12 B7 A7
0260 | 0C B9 11 2A 1C F9 37 31 91 A9 06 A5 6C 8F 98 4C
0270 | 9F 4D 71 8A 4D 9C 62 42 40 05 B6 B7 4F 87 80 B0
0280 | 99 91 AC 83 0E F5 80 B8 19 77 54 79</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 B4 4B B0 7A 5A 99 66
0010 | A0 02 00 00 5C 07 E8 D0 66 1D B0 4F 07 59 BA 01
0020 | 12 AF 0F 39 23 A2 49 6C 48 E1 4C F6 49 34 95 00
0030 | BF 9F 7D B9 A9 72 79 46 FE 50 02 00 69 69 7F CB
0040 | CC F9 EB 24 42 5B 5B 30 76 04 D9 6A A6 49 F1 92
0050 | C6 1A B1 DB 31 31 3D 71 E4 A4 C5 BC 86 A4 FC 06
0060 | 84 5E A4 BF 7D F4 58 B5 B5 2B BF 5F 1B 3D 4F 21
0070 | 25 41 01 F6 62 20 D3 4B 40 15 36 EF 73 E9 10 FB
0080 | 2A D4 50 EE 2A B1 93 98 24 60 8E C6 3E 4F 28 A1
0090 | 7C BD CD CA AE F3 56 7B DF 42 AB 18 5E 99 9D 04
00A0 | 85 FC 58 5E 9F CA BB 5E B0 B5 BB CB F0 2F E2 D1
00B0 | D2 E3 9E 7B 81 9A E0 C6 3E B2 2A 96 67 B7 4E B5
00C0 | 5E BB 53 A6 9D 62 AB 13 C6 53 39 CA 0D 97 38 92
00D0 | 8D D6 73 31 2B E3 63 2B 54 2D 81 DB 45 6D BB 2C
00E0 | 3D 9C 51 6B E0 27 0C A0 00 52 42 C2 67 2D 71 FC
00F0 | 6F C0 00 67 9C 3E 9D 4B 00 C7 12 23 F5 FA 27 97
0100 | E2 D4 2A FE 73 95 EB 21 2B AA 8B 4F 2F 72 B1 74
0110 | 73 94 0B 06 69 AF 93 26 4B 5D 84 D5 C6 FD 92 82
0120 | 5B 7C 2D A6 5B 13 D8 91 1C E3 4A 2D BD 0B 97 74
0130 | 50 A9 35 A5 5A D6 A9 40 11 8A EF 5B A2 87 2C 0C
0140 | 70 33 FA CC 9B 53 AC 27 D7 F5 4B 8C 2F FD 43 F9
0150 | DF 45 D2 4C A7 10 70 77 3E A0 91 EB 8A A6 99 01
0160 | 19 94 C7 29 69 F1 10 0F 3C 49 5E 91 B6 67 5C 2B
0170 | 08 0D 6F 05 1C 3E 11 60 77 A1 00 57 53 47 5D 8C
0180 | EC B7 E8 3B 9C 7B BD 23 2F 14 7D 55 A1 33 6B 65
0190 | 45 CF 9A 0D FF 6C F7 00 B7 65 67 6B 75 D9 EF 53
01A0 | 5B 98 39 49 52 1F 76 3E 8D DD FC 29 EC ED D0 A9
01B0 | 65 DC B3 A7 11 A4 95 CA 88 22 9F 51 3B 70 F2 DF
01C0 | 36 55 D6 6F 39 1F F6 95 09 B1 D7 78 7B 21 36 BB
01D0 | C8 84 46 50 09 DA 7D B2 62 EB E4 9F C3 8E 16 75
01E0 | CF EF 0E A6 15 18 ED 42 9A 99 D7 7A B0 00 F7 42
01F0 | AA 53 E3 78 2F 03 DC FF 15 19 02 B1 A8 75 05 1C
0200 | 2C 90 12 7D 57 78 8D 96 35 53 1C A3 11 54 C9 8D
0210 | 84 02 E0 26 05 5C 68 14 6B F7 E1 61 E0 A8 47 EB
0220 | 87 5C 3E 90 43 90 0C 1B 50 44 9E 57 07 2F 31 B9
0230 | 63 69 22 6A BA 5C 04 B7 E2 19 EC 2B D5 7D E7 4C
0240 | B5 49 41 E8 D7 B4 3F 28 49 03 FF 8A 79 35 71 08
0250 | D6 BF B4 99 71 CF 77 B7 DF CF D8 4D E7 6E DF 37
0260 | 11 AF C2 7E CB EF ED E2 E6 22 A9 C6 64 57 4F 80
0270 | 37 BD A9 D1 C4 8A 26 76 D8 FD 3B 64 A7 0D 99 EE
0280 | 2F 42 17 54 B3 B1 56 44 6B F3 E5 5B</code></pre>
<p>Payload (de)serialization:</p>
<pre><code>server_DH_params_ok#d0e8075c nonce:int128 server_nonce:int128 encrypted_answer:string = Server_DH_Params;</code></pre>
<table class="table">
@ -464,13 +464,13 @@ random_padding_bytes = 5AD52E434950F61F04ECE6113D993F76FD9B11EAC7204ACCA6A11A9EA
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>0190B0B1B04D9966</code></td>
<td><code>01B44BB07A5A9966</code></td>
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() &lt;&lt; 32) + (N*4)</td>
</tr>
<tr>
<td>message_length</td>
<td>16, 4</td>
<td><code>DC020000</code> (732 in decimal)</td>
<td><code>A0020000</code> (672 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -482,19 +482,19 @@ random_padding_bytes = 5AD52E434950F61F04ECE6113D993F76FD9B11EAC7204ACCA6A11A9EA
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>A6B2F81F8FDB3D173382A6285E433C5E</code></td>
<td><code>661DB04F0759BA0112AF0F3923A2496C</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>572372FCD68BD97F394BA898AB1956DE</code></td>
<td><code>48E14CF649349500BF9F7DB9A9727946</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_answer</td>
<td>56, 596</td>
<td><code>FE500200C13C7EAA1ADB0CC90DB1B7FF</code> <code>76436CD22D3B28951DEFA9083D1F523B</code> <code>83DBC2A5F338CAB87544B2309E1729AD</code> <code>F7DFA85A5B6895C10381B10F864D3184</code> <code>9A1723D94968CED0E18FE057FA921A10</code> <code>F47C6D1122A8E653A2CB687D0B47BBA2</code> <code>BF65DC119D1722EE8DABA989B8ED0245</code> <code>3DD4E85933DD8C8799FEB8BF0A952DC9</code> <code>2985D7D9B31E7F757AD613FB48CF5F3E</code> <code>2965575DD9422DD04394878B075ACAD3</code> <code>1B39AF12C4044D4967901F710DDA3709</code> <code>ACE37142759F979BAC10F290C66B9E9C</code> <code>D06510228A404AAD4700EA0AACC8DAD1</code> <code>0A818564B9795D8DE70EB1EECC2F5823</code> <code>65FA4EDEEDAE3CDBCFACF3EEACA63054</code> <code>D90EC15B8C54A8CFC94F4DC967BC6A11</code> <code>92BA89700B45BACDBA6032B19E7EACB6</code> <code>6E01ADD58F170B9DF733ECFF4C273595</code> <code>DA181DA85B449A5B897EE46521F4CD51</code> <code>B1DD9653FA95020A54CC9EECDBA2DE7B</code> <code>5C69584027933724828401D5B17FCBB2</code> <code>2EB860D6C445E6F786A0BE040160782A</code> <code>639AF34BC4EC0EE4A38596C6F2F8E98F</code> <code>443901CBF8A3B90CC6133A7D7CD18BFA</code> <code>D2D0DCFEC485D3A02B6052F591B03FB6</code> <code>99E2169EB8D74A7C98A9A70213DD45C3</code> <code>FB5C810AF7A92C815CA50B5848F5C88C</code> <code>D74F87876B7E6011B54B92BE8A24E8CD</code> <code>7FFAECED791AD84A4725B62ADA02FA0D</code> <code>F2333568C8E2CC0A9EE51A8A81EA70EE</code> <code>C994F2767514151F14699D19D953F8FA</code> <code>8F8077CF06C58B47CFFADE83A1814E38</code> <code>3EC3F6632414C4BD1DD7A70A26A195C9</code> <code>632C1358A27759AF88DA065B5D95603B</code> <code>ECDDF718D912B7A70CB9112A1CF93731</code> <code>91A906A56C8F984C9F4D718A4D9C6242</code> <code>4005B6B74F8780B09991AC830EF580B8</code><br> <code>19775479</code></td>
<td><code>FE50020069697FCBCCF9EB24425B5B30</code> <code>7604D96AA649F192C61AB1DB31313D71</code> <code>E4A4C5BC86A4FC06845EA4BF7DF458B5</code> <code>B52BBF5F1B3D4F21254101F66220D34B</code> <code>401536EF73E910FB2AD450EE2AB19398</code> <code>24608EC63E4F28A17CBDCDCAAEF3567B</code> <code>DF42AB185E999D0485FC585E9FCABB5E</code> <code>B0B5BBCBF02FE2D1D2E39E7B819AE0C6</code> <code>3EB22A9667B74EB55EBB53A69D62AB13</code> <code>C65339CA0D9738928DD673312BE3632B</code> <code>542D81DB456DBB2C3D9C516BE0270CA0</code> <code>005242C2672D71FC6FC000679C3E9D4B</code> <code>00C71223F5FA2797E2D42AFE7395EB21</code> <code>2BAA8B4F2F72B17473940B0669AF9326</code> <code>4B5D84D5C6FD92825B7C2DA65B13D891</code> <code>1CE34A2DBD0B977450A935A55AD6A940</code> <code>118AEF5BA2872C0C7033FACC9B53AC27</code> <code>D7F54B8C2FFD43F9DF45D24CA7107077</code> <code>3EA091EB8AA699011994C72969F1100F</code> <code>3C495E91B6675C2B080D6F051C3E1160</code> <code>77A1005753475D8CECB7E83B9C7BBD23</code> <code>2F147D55A1336B6545CF9A0DFF6CF700</code> <code>B765676B75D9EF535B983949521F763E</code> <code>8DDDFC29ECEDD0A965DCB3A711A495CA</code> <code>88229F513B70F2DF3655D66F391FF695</code> <code>09B1D7787B2136BBC884465009DA7DB2</code> <code>62EBE49FC38E1675CFEF0EA61518ED42</code> <code>9A99D77AB000F742AA53E3782F03DCFF</code> <code>151902B1A875051C2C90127D57788D96</code> <code>35531CA31154C98D8402E026055C6814</code> <code>6BF7E161E0A847EB875C3E9043900C1B</code> <code>50449E57072F31B96369226ABA5C04B7</code> <code>E219EC2BD57DE74CB54941E8D7B43F28</code> <code>4903FF8A79357108D6BFB49971CF77B7</code> <code>DFCFD84DE76EDF3711AFC27ECBEFEDE2</code> <code>E622A9C664574F8037BDA9D1C48A2676</code> <code>D8FD3B64A70D99EE2F421754B3B15644</code><br> <code>6BF3E55B</code></td>
<td>See below</td>
</tr>
</tbody>
@ -502,20 +502,20 @@ random_padding_bytes = 5AD52E434950F61F04ECE6113D993F76FD9B11EAC7204ACCA6A11A9EA
<!-- 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 = C13C7EAA1ADB0CC90DB1B7FF76436CD22D3B28951DEFA9083D1F523B83DBC2A5F338CAB87544B2309E1729ADF7DFA85A5B6895C10381B10F864D31849A1723D94968CED0E18FE057FA921A10F47C6D1122A8E653A2CB687D0B47BBA2BF65DC119D1722EE8DABA989B8ED02453DD4E85933DD8C8799FEB8BF0A952DC92985D7D9B31E7F757AD613FB48CF5F3E2965575DD9422DD04394878B075ACAD31B39AF12C4044D4967901F710DDA3709ACE37142759F979BAC10F290C66B9E9CD06510228A404AAD4700EA0AACC8DAD10A818564B9795D8DE70EB1EECC2F582365FA4EDEEDAE3CDBCFACF3EEACA63054D90EC15B8C54A8CFC94F4DC967BC6A1192BA89700B45BACDBA6032B19E7EACB66E01ADD58F170B9DF733ECFF4C273595DA181DA85B449A5B897EE46521F4CD51B1DD9653FA95020A54CC9EECDBA2DE7B5C69584027933724828401D5B17FCBB22EB860D6C445E6F786A0BE040160782A639AF34BC4EC0EE4A38596C6F2F8E98F443901CBF8A3B90CC6133A7D7CD18BFAD2D0DCFEC485D3A02B6052F591B03FB699E2169EB8D74A7C98A9A70213DD45C3FB5C810AF7A92C815CA50B5848F5C88CD74F87876B7E6011B54B92BE8A24E8CD7FFAECED791AD84A4725B62ADA02FA0DF2333568C8E2CC0A9EE51A8A81EA70EEC994F2767514151F14699D19D953F8FA8F8077CF06C58B47CFFADE83A1814E383EC3F6632414C4BD1DD7A70A26A195C9632C1358A27759AF88DA065B5D95603BECDDF718D912B7A70CB9112A1CF9373191A906A56C8F984C9F4D718A4D9C62424005B6B74F8780B09991AC830EF580B819775479
tmp_aes_key = D431055F7852B00BB641DE00717E3C33AD4CA820CAF6CB655007B603E0B12517
tmp_aes_iv = E22CBE27AAAF912C4CF8D06BA75F482EA4C255AD3EE6D08278028B8C45665BFB</code></pre>
<pre><code>encrypted_answer = 69697FCBCCF9EB24425B5B307604D96AA649F192C61AB1DB31313D71E4A4C5BC86A4FC06845EA4BF7DF458B5B52BBF5F1B3D4F21254101F66220D34B401536EF73E910FB2AD450EE2AB1939824608EC63E4F28A17CBDCDCAAEF3567BDF42AB185E999D0485FC585E9FCABB5EB0B5BBCBF02FE2D1D2E39E7B819AE0C63EB22A9667B74EB55EBB53A69D62AB13C65339CA0D9738928DD673312BE3632B542D81DB456DBB2C3D9C516BE0270CA0005242C2672D71FC6FC000679C3E9D4B00C71223F5FA2797E2D42AFE7395EB212BAA8B4F2F72B17473940B0669AF93264B5D84D5C6FD92825B7C2DA65B13D8911CE34A2DBD0B977450A935A55AD6A940118AEF5BA2872C0C7033FACC9B53AC27D7F54B8C2FFD43F9DF45D24CA71070773EA091EB8AA699011994C72969F1100F3C495E91B6675C2B080D6F051C3E116077A1005753475D8CECB7E83B9C7BBD232F147D55A1336B6545CF9A0DFF6CF700B765676B75D9EF535B983949521F763E8DDDFC29ECEDD0A965DCB3A711A495CA88229F513B70F2DF3655D66F391FF69509B1D7787B2136BBC884465009DA7DB262EBE49FC38E1675CFEF0EA61518ED429A99D77AB000F742AA53E3782F03DCFF151902B1A875051C2C90127D57788D9635531CA31154C98D8402E026055C68146BF7E161E0A847EB875C3E9043900C1B50449E57072F31B96369226ABA5C04B7E219EC2BD57DE74CB54941E8D7B43F284903FF8A79357108D6BFB49971CF77B7DFCFD84DE76EDF3711AFC27ECBEFEDE2E622A9C664574F8037BDA9D1C48A2676D8FD3B64A70D99EE2F421754B3B156446BF3E55B
tmp_aes_key = C0AE07F359E603AE019348325A3FE140E375F720C5C6D2C10AEB06CA0E4D9D57
tmp_aes_iv = 451C92CCB113C91BD2488002975E2504B0186EE1450111840D5906603E94B4C7</code></pre>
<!-- end server_DH_inner_data_input -->
<p>Yielding:</p>
<!-- start server_DH_inner_data_output -->
<pre><code>answer_with_hash = 4E52418E166EAC51AF46B18AB0EEB6FB7740FC8CBA0D89B5A6B2F81F8FDB3D173382A6285E433C5E572372FCD68BD97F394BA898AB1956DE03000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE0001008EE2D7D2170232D3497A4264B2913BAED126F682EA5AF3E2BC90A8AF48652C29A8EB9BC37BF9F5465C8861F06BF241C7F7A9988DC07D1E33E670D2E344FA7C7F4029CFA27135FC7884D319E7580EC4B271444D7A4B12B247B984161D6A46AC973FC02FC0A0E833A261023DA11395B313D174428E891A7A174FE4CB5A694C64DDDE6FA7E520F09403513B4BB3B1CEBD6F487143307B87CAAAEFBF1436A52B9E35E3CE44056CA5DA49DC628478DF4EDA96DBA7159E004973FB1F706CE65F0AE0DCDA00A22E50516D16CD64F7DB17AEE7A0BA7FA553327C8CC1DAC881494DBD53AE610FB1ED544D039D052B725067B246F4A2352B1A918A113A04CEE7C5D16FD2F9B04D99661CA8261664812E16
answer = BA0D89B5A6B2F81F8FDB3D173382A6285E433C5E572372FCD68BD97F394BA898AB1956DE03000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE0001008EE2D7D2170232D3497A4264B2913BAED126F682EA5AF3E2BC90A8AF48652C29A8EB9BC37BF9F5465C8861F06BF241C7F7A9988DC07D1E33E670D2E344FA7C7F4029CFA27135FC7884D319E7580EC4B271444D7A4B12B247B984161D6A46AC973FC02FC0A0E833A261023DA11395B313D174428E891A7A174FE4CB5A694C64DDDE6FA7E520F09403513B4BB3B1CEBD6F487143307B87CAAAEFBF1436A52B9E35E3CE44056CA5DA49DC628478DF4EDA96DBA7159E004973FB1F706CE65F0AE0DCDA00A22E50516D16CD64F7DB17AEE7A0BA7FA553327C8CC1DAC881494DBD53AE610FB1ED544D039D052B725067B246F4A2352B1A918A113A04CEE7C5D16FD2F9B04D99661CA8261664812E16</code></pre>
<pre><code>answer_with_hash = 288147F1BCF11685D3569711433F906477CA224EBA0D89B5661DB04F0759BA0112AF0F3923A2496C48E14CF649349500BF9F7DB9A972794603000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE0001000E1D6A0D29F32896B87BE1029282AD002A22DE92A01C8DDF79911C5B2463F322B23905813FAED87A96162ABA0D7A7D8CE5F46BB5B99FB16932F2558AEE499B8B66C0C8176583139D279BEBBFF40238DC124D4380E060EDEB449D5C7C04A975EA334B26B0E5871A89F0FEC564F42CFD6159AEE5FAE5FFC9147495F69E0EBE6E70E290E73B1FEDFBA9AA91BA354A97454C999D2F43ADF058DDC87756C9CD2CE06D225AF0D362295B40126358A6BBD8B83BA7F4A8D312B81FAF0D035E93E0CEA19BCD82AEBD527EBD993D964DEE9295039968E7C22CC922B89803AB79E8F2672C3AA1F35817CB301A270E783359317F244641901CF9AEA5854D10DC5E74146D2C9C7A5A99668465683E46BBA9BA
answer = BA0D89B5661DB04F0759BA0112AF0F3923A2496C48E14CF649349500BF9F7DB9A972794603000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE0001000E1D6A0D29F32896B87BE1029282AD002A22DE92A01C8DDF79911C5B2463F322B23905813FAED87A96162ABA0D7A7D8CE5F46BB5B99FB16932F2558AEE499B8B66C0C8176583139D279BEBBFF40238DC124D4380E060EDEB449D5C7C04A975EA334B26B0E5871A89F0FEC564F42CFD6159AEE5FAE5FFC9147495F69E0EBE6E70E290E73B1FEDFBA9AA91BA354A97454C999D2F43ADF058DDC87756C9CD2CE06D225AF0D362295B40126358A6BBD8B83BA7F4A8D312B81FAF0D035E93E0CEA19BCD82AEBD527EBD993D964DEE9295039968E7C22CC922B89803AB79E8F2672C3AA1F35817CB301A270E783359317F244641901CF9AEA5854D10DC5E74146D2C9C7A5A99668465683E46BBA9BA</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 A6 B2 F8 1F 8F DB 3D 17 33 82 A6 28
0010 | 5E 43 3C 5E 57 23 72 FC D6 8B D9 7F 39 4B A8 98
0020 | AB 19 56 DE 03 00 00 00 FE 00 01 00 C7 1C AE B9
<pre><code>0000 | BA 0D 89 B5 66 1D B0 4F 07 59 BA 01 12 AF 0F 39
0010 | 23 A2 49 6C 48 E1 4C F6 49 34 95 00 BF 9F 7D B9
0020 | A9 72 79 46 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 = BA0D89B5A6B2F81F8FDB3D173382A6285E433C5E572372FCD68BD97F394BA898AB1956D
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 | 8E E2 D7 D2 17 02 32 D3 49 7A 42 64 B2 91 3B AE
0140 | D1 26 F6 82 EA 5A F3 E2 BC 90 A8 AF 48 65 2C 29
0150 | A8 EB 9B C3 7B F9 F5 46 5C 88 61 F0 6B F2 41 C7
0160 | F7 A9 98 8D C0 7D 1E 33 E6 70 D2 E3 44 FA 7C 7F
0170 | 40 29 CF A2 71 35 FC 78 84 D3 19 E7 58 0E C4 B2
0180 | 71 44 4D 7A 4B 12 B2 47 B9 84 16 1D 6A 46 AC 97
0190 | 3F C0 2F C0 A0 E8 33 A2 61 02 3D A1 13 95 B3 13
01A0 | D1 74 42 8E 89 1A 7A 17 4F E4 CB 5A 69 4C 64 DD
01B0 | DE 6F A7 E5 20 F0 94 03 51 3B 4B B3 B1 CE BD 6F
01C0 | 48 71 43 30 7B 87 CA AA EF BF 14 36 A5 2B 9E 35
01D0 | E3 CE 44 05 6C A5 DA 49 DC 62 84 78 DF 4E DA 96
01E0 | DB A7 15 9E 00 49 73 FB 1F 70 6C E6 5F 0A E0 DC
01F0 | DA 00 A2 2E 50 51 6D 16 CD 64 F7 DB 17 AE E7 A0
0200 | BA 7F A5 53 32 7C 8C C1 DA C8 81 49 4D BD 53 AE
0210 | 61 0F B1 ED 54 4D 03 9D 05 2B 72 50 67 B2 46 F4
0220 | A2 35 2B 1A 91 8A 11 3A 04 CE E7 C5 D1 6F D2 F9
0230 | B0 4D 99 66</code></pre>
0130 | 0E 1D 6A 0D 29 F3 28 96 B8 7B E1 02 92 82 AD 00
0140 | 2A 22 DE 92 A0 1C 8D DF 79 91 1C 5B 24 63 F3 22
0150 | B2 39 05 81 3F AE D8 7A 96 16 2A BA 0D 7A 7D 8C
0160 | E5 F4 6B B5 B9 9F B1 69 32 F2 55 8A EE 49 9B 8B
0170 | 66 C0 C8 17 65 83 13 9D 27 9B EB BF F4 02 38 DC
0180 | 12 4D 43 80 E0 60 ED EB 44 9D 5C 7C 04 A9 75 EA
0190 | 33 4B 26 B0 E5 87 1A 89 F0 FE C5 64 F4 2C FD 61
01A0 | 59 AE E5 FA E5 FF C9 14 74 95 F6 9E 0E BE 6E 70
01B0 | E2 90 E7 3B 1F ED FB A9 AA 91 BA 35 4A 97 45 4C
01C0 | 99 9D 2F 43 AD F0 58 DD C8 77 56 C9 CD 2C E0 6D
01D0 | 22 5A F0 D3 62 29 5B 40 12 63 58 A6 BB D8 B8 3B
01E0 | A7 F4 A8 D3 12 B8 1F AF 0D 03 5E 93 E0 CE A1 9B
01F0 | CD 82 AE BD 52 7E BD 99 3D 96 4D EE 92 95 03 99
0200 | 68 E7 C2 2C C9 22 B8 98 03 AB 79 E8 F2 67 2C 3A
0210 | A1 F3 58 17 CB 30 1A 27 0E 78 33 59 31 7F 24 46
0220 | 41 90 1C F9 AE A5 85 4D 10 DC 5E 74 14 6D 2C 9C
0230 | 7A 5A 99 66</code></pre>
<p>Payload (de)serialization:</p>
<pre><code>server_DH_inner_data#b5890dba nonce:int128 server_nonce:int128 g:int dh_prime:string g_a:string server_time:int = Server_DH_inner_data;</code></pre>
<table class="table">
@ -570,13 +570,13 @@ answer = BA0D89B5A6B2F81F8FDB3D173382A6285E433C5E572372FCD68BD97F394BA898AB1956D
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>A6B2F81F8FDB3D173382A6285E433C5E</code></td>
<td><code>661DB04F0759BA0112AF0F3923A2496C</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>572372FCD68BD97F394BA898AB1956DE</code></td>
<td><code>48E14CF649349500BF9F7DB9A9727946</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
@ -594,13 +594,13 @@ answer = BA0D89B5A6B2F81F8FDB3D173382A6285E433C5E572372FCD68BD97F394BA898AB1956D
<tr>
<td>g_a</td>
<td>300, 260</td>
<td><code>FE0001008EE2D7D2170232D3497A4264</code> <code>B2913BAED126F682EA5AF3E2BC90A8AF</code> <code>48652C29A8EB9BC37BF9F5465C8861F0</code> <code>6BF241C7F7A9988DC07D1E33E670D2E3</code> <code>44FA7C7F4029CFA27135FC7884D319E7</code> <code>580EC4B271444D7A4B12B247B984161D</code> <code>6A46AC973FC02FC0A0E833A261023DA1</code> <code>1395B313D174428E891A7A174FE4CB5A</code> <code>694C64DDDE6FA7E520F09403513B4BB3</code> <code>B1CEBD6F487143307B87CAAAEFBF1436</code> <code>A52B9E35E3CE44056CA5DA49DC628478</code> <code>DF4EDA96DBA7159E004973FB1F706CE6</code> <code>5F0AE0DCDA00A22E50516D16CD64F7DB</code> <code>17AEE7A0BA7FA553327C8CC1DAC88149</code> <code>4DBD53AE610FB1ED544D039D052B7250</code> <code>67B246F4A2352B1A918A113A04CEE7C5</code><br> <code>D16FD2F9</code></td>
<td><code>FE0001000E1D6A0D29F32896B87BE102</code> <code>9282AD002A22DE92A01C8DDF79911C5B</code> <code>2463F322B23905813FAED87A96162ABA</code> <code>0D7A7D8CE5F46BB5B99FB16932F2558A</code> <code>EE499B8B66C0C8176583139D279BEBBF</code> <code>F40238DC124D4380E060EDEB449D5C7C</code> <code>04A975EA334B26B0E5871A89F0FEC564</code> <code>F42CFD6159AEE5FAE5FFC9147495F69E</code> <code>0EBE6E70E290E73B1FEDFBA9AA91BA35</code> <code>4A97454C999D2F43ADF058DDC87756C9</code> <code>CD2CE06D225AF0D362295B40126358A6</code> <code>BBD8B83BA7F4A8D312B81FAF0D035E93</code> <code>E0CEA19BCD82AEBD527EBD993D964DEE</code> <code>9295039968E7C22CC922B89803AB79E8</code> <code>F2672C3AA1F35817CB301A270E783359</code> <code>317F244641901CF9AEA5854D10DC5E74</code><br> <code>146D2C9C</code></td>
<td><code>g_a</code> diffie-hellman parameter</td>
</tr>
<tr>
<td>server_time</td>
<td>560, 4</td>
<td><code>B04D9966</code> (1721322928 in decimal)</td>
<td><code>7A5A9966</code> (1721326202 in decimal)</td>
<td>Server time</td>
</tr>
</tbody>
@ -609,34 +609,34 @@ answer = BA0D89B5A6B2F81F8FDB3D173382A6285E433C5E572372FCD68BD97F394BA898AB1956D
<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 = 7D89404EF1BEB0A46904BDF7B07B533AC09D7D26339EDCC81DC5005EDD8D43DB31751D91BA51270266E5AFEA9B23E31E3C820D98F2C699BC60164A8B5D9E4D884CE5AEB8396029DD3753EC3EDE65C38BAFC0B8FAD22B6DFC6BFAF9F33B9B8F87E7EA993FBC32408AA96E286FB45D4394CEFE381435719E5F7128C3E55CED789641A1F7D2B3652C67EE0BFBA6F617B11AC18228AB056E87CACFD1B2ACC470A9F161677C781C1787F2950D271971CB47CC8C2FA9C86B01FFB65EA1505D7A8E95AFC48A6FE097E389AA181FF79F47C4516EF0F7DA3436B8FFBD9788B5C50602BD6FACA3AAFC35D597B40DBAD00ADF068C0E5F30C7BB39ED121CE6D32A783E1B430F</code></pre>
<pre><code>b = 7F05A4B15B741C1834C735E6B52AB5443DED56A3D19D706672BA26E7F73A50FC735AF8E1DA3DD8274C2C690B667C38B5E202DBE5DF792E81D2D2931C41ADECECA65DE1621485E91FA42E57D3E97D421488EACEC1EE30B23F00EB65F6A582DA051CC9CD9A842171E471BD8528147D03251E24664667CCEE3B8041DDBA989F301CAAB532654263175053D75BF90551B82F3D8FDADE12628F54B79B171E50417B5F334F66394C8A252961C69004851E49933DF6D46D82CC1DD0F9A3E0F7CEEC8219729EEB7A4BC5F333989D1C60D4498E2C73C98B640555C09A376BC94B70FFAE8EC00E131E1D598A6999386E4EAFB22A5EC1D0B9349D8C365C559669A4C559AC0E</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 = 969772FCE1BA2A936243E1150C0F3D6E9FC1FAB952F817F729C3E6825C1C85C1A70A2732DFA83FC7C3570965FE591BE60EA91678F3E67A46C04F77F692C0DCAFA125AF0E71FB6C276208472B9089B2F73979787BA9F789A213BBF63C90FD9E0EE5492BBE68476798DFBFA1AD5A30DD6739C24A333ECB8C22369F384416A533DC18D3FF5D1FD257950C0D384F9972E9BB48C64C9B224C672EC9D5991EE5E63FCA8BEBC2BEDCC853973CA3DCF663721FBB43EA33A1AFF8EBF02497252A2023024C98B68A90B9A2DF15911B53DF1AAABFB8DA7C79A5759A8BE9C6B18843F18A8D6A9A0C1AB4FB24A7862EA2D92F0B5A938D4FA37F6CD953D35F255815ED32015F9E</code></pre>
<pre><code>g_b = 830BF0AF2872BCAC62E7F6841937C7A2135D5988388BE5009309EA76974A290AFE797EC420AC562B972A1ECB110C8A475352C8EC1ADD022BE5612E9405541E2EED8FDF1296BB9EB31E8ADCBB81413D61D6CD8308D97D73718289BBFFBEE77305D3B8675FEF2676F003A71A0B112EB5776521DF16AC27025C73DBA12F1E91E713C650C9F905181E549BB1551BDAA84F2051D079FED5D81CEAA1DCA4A34DAF6E5D1477C4A88B727C1780C918AA5172A92EE417500D568DF1F00CF16223713C5F72FE7A9C534AD83AD331B6468A97030CAA344310C955128F950055FB7A10434F1ED310BD9422236595467B50A6B3E5DA33A1F2E859C2273657739CA8CCE70C3C1C</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 A6 B2 F8 1F 8F DB 3D 17 33 82 A6 28
0010 | 5E 43 3C 5E 57 23 72 FC D6 8B D9 7F 39 4B A8 98
0020 | AB 19 56 DE 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | 96 97 72 FC E1 BA 2A 93 62 43 E1 15 0C 0F 3D 6E
0040 | 9F C1 FA B9 52 F8 17 F7 29 C3 E6 82 5C 1C 85 C1
0050 | A7 0A 27 32 DF A8 3F C7 C3 57 09 65 FE 59 1B E6
0060 | 0E A9 16 78 F3 E6 7A 46 C0 4F 77 F6 92 C0 DC AF
0070 | A1 25 AF 0E 71 FB 6C 27 62 08 47 2B 90 89 B2 F7
0080 | 39 79 78 7B A9 F7 89 A2 13 BB F6 3C 90 FD 9E 0E
0090 | E5 49 2B BE 68 47 67 98 DF BF A1 AD 5A 30 DD 67
00A0 | 39 C2 4A 33 3E CB 8C 22 36 9F 38 44 16 A5 33 DC
00B0 | 18 D3 FF 5D 1F D2 57 95 0C 0D 38 4F 99 72 E9 BB
00C0 | 48 C6 4C 9B 22 4C 67 2E C9 D5 99 1E E5 E6 3F CA
00D0 | 8B EB C2 BE DC C8 53 97 3C A3 DC F6 63 72 1F BB
00E0 | 43 EA 33 A1 AF F8 EB F0 24 97 25 2A 20 23 02 4C
00F0 | 98 B6 8A 90 B9 A2 DF 15 91 1B 53 DF 1A AA BF B8
0100 | DA 7C 79 A5 75 9A 8B E9 C6 B1 88 43 F1 8A 8D 6A
0110 | 9A 0C 1A B4 FB 24 A7 86 2E A2 D9 2F 0B 5A 93 8D
0120 | 4F A3 7F 6C D9 53 D3 5F 25 58 15 ED 32 01 5F 9E</code></pre>
<pre><code>0000 | 54 B6 43 66 66 1D B0 4F 07 59 BA 01 12 AF 0F 39
0010 | 23 A2 49 6C 48 E1 4C F6 49 34 95 00 BF 9F 7D B9
0020 | A9 72 79 46 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | 83 0B F0 AF 28 72 BC AC 62 E7 F6 84 19 37 C7 A2
0040 | 13 5D 59 88 38 8B E5 00 93 09 EA 76 97 4A 29 0A
0050 | FE 79 7E C4 20 AC 56 2B 97 2A 1E CB 11 0C 8A 47
0060 | 53 52 C8 EC 1A DD 02 2B E5 61 2E 94 05 54 1E 2E
0070 | ED 8F DF 12 96 BB 9E B3 1E 8A DC BB 81 41 3D 61
0080 | D6 CD 83 08 D9 7D 73 71 82 89 BB FF BE E7 73 05
0090 | D3 B8 67 5F EF 26 76 F0 03 A7 1A 0B 11 2E B5 77
00A0 | 65 21 DF 16 AC 27 02 5C 73 DB A1 2F 1E 91 E7 13
00B0 | C6 50 C9 F9 05 18 1E 54 9B B1 55 1B DA A8 4F 20
00C0 | 51 D0 79 FE D5 D8 1C EA A1 DC A4 A3 4D AF 6E 5D
00D0 | 14 77 C4 A8 8B 72 7C 17 80 C9 18 AA 51 72 A9 2E
00E0 | E4 17 50 0D 56 8D F1 F0 0C F1 62 23 71 3C 5F 72
00F0 | FE 7A 9C 53 4A D8 3A D3 31 B6 46 8A 97 03 0C AA
0100 | 34 43 10 C9 55 12 8F 95 00 55 FB 7A 10 43 4F 1E
0110 | D3 10 BD 94 22 23 65 95 46 7B 50 A6 B3 E5 DA 33
0120 | A1 F2 E8 59 C2 27 36 57 73 9C A8 CC E7 0C 3C 1C</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 = BA0D89B5A6B2F81F8FDB3D173382A6285E433C5E572372FCD68BD97F394BA898AB1956D
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>A6B2F81F8FDB3D173382A6285E433C5E</code></td>
<td><code>661DB04F0759BA0112AF0F3923A2496C</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>572372FCD68BD97F394BA898AB1956DE</code></td>
<td><code>48E14CF649349500BF9F7DB9A9727946</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>g_b</td>
<td>36, 260</td>
<td><code>FE000100969772FCE1BA2A936243E115</code> <code>0C0F3D6E9FC1FAB952F817F729C3E682</code> <code>5C1C85C1A70A2732DFA83FC7C3570965</code> <code>FE591BE60EA91678F3E67A46C04F77F6</code> <code>92C0DCAFA125AF0E71FB6C276208472B</code> <code>9089B2F73979787BA9F789A213BBF63C</code> <code>90FD9E0EE5492BBE68476798DFBFA1AD</code> <code>5A30DD6739C24A333ECB8C22369F3844</code> <code>16A533DC18D3FF5D1FD257950C0D384F</code> <code>9972E9BB48C64C9B224C672EC9D5991E</code> <code>E5E63FCA8BEBC2BEDCC853973CA3DCF6</code> <code>63721FBB43EA33A1AFF8EBF02497252A</code> <code>2023024C98B68A90B9A2DF15911B53DF</code> <code>1AAABFB8DA7C79A5759A8BE9C6B18843</code> <code>F18A8D6A9A0C1AB4FB24A7862EA2D92F</code> <code>0B5A938D4FA37F6CD953D35F255815ED</code><br> <code>32015F9E</code></td>
<td><code>FE000100830BF0AF2872BCAC62E7F684</code> <code>1937C7A2135D5988388BE5009309EA76</code> <code>974A290AFE797EC420AC562B972A1ECB</code> <code>110C8A475352C8EC1ADD022BE5612E94</code> <code>05541E2EED8FDF1296BB9EB31E8ADCBB</code> <code>81413D61D6CD8308D97D73718289BBFF</code> <code>BEE77305D3B8675FEF2676F003A71A0B</code> <code>112EB5776521DF16AC27025C73DBA12F</code> <code>1E91E713C650C9F905181E549BB1551B</code> <code>DAA84F2051D079FED5D81CEAA1DCA4A3</code> <code>4DAF6E5D1477C4A88B727C1780C918AA</code> <code>5172A92EE417500D568DF1F00CF16223</code> <code>713C5F72FE7A9C534AD83AD331B6468A</code> <code>97030CAA344310C955128F950055FB7A</code> <code>10434F1ED310BD9422236595467B50A6</code> <code>B3E5DA33A1F2E859C2273657739CA8CC</code><br> <code>E70C3C1C</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 = BA0D89B5A6B2F81F8FDB3D173382A6285E433C5E572372FCD68BD97F394BA898AB1956D
<!-- 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 = 54B64366A6B2F81F8FDB3D173382A6285E433C5E572372FCD68BD97F394BA898AB1956DE0000000000000000FE000100969772FCE1BA2A936243E1150C0F3D6E9FC1FAB952F817F729C3E6825C1C85C1A70A2732DFA83FC7C3570965FE591BE60EA91678F3E67A46C04F77F692C0DCAFA125AF0E71FB6C276208472B9089B2F73979787BA9F789A213BBF63C90FD9E0EE5492BBE68476798DFBFA1AD5A30DD6739C24A333ECB8C22369F384416A533DC18D3FF5D1FD257950C0D384F9972E9BB48C64C9B224C672EC9D5991EE5E63FCA8BEBC2BEDCC853973CA3DCF663721FBB43EA33A1AFF8EBF02497252A2023024C98B68A90B9A2DF15911B53DF1AAABFB8DA7C79A5759A8BE9C6B18843F18A8D6A9A0C1AB4FB24A7862EA2D92F0B5A938D4FA37F6CD953D35F255815ED32015F9E
padding = F668B655E93835549635A919
tmp_aes_key = D431055F7852B00BB641DE00717E3C33AD4CA820CAF6CB655007B603E0B12517
tmp_aes_iv = E22CBE27AAAF912C4CF8D06BA75F482EA4C255AD3EE6D08278028B8C45665BFB</code></pre>
<pre><code>data = 54B64366661DB04F0759BA0112AF0F3923A2496C48E14CF649349500BF9F7DB9A97279460000000000000000FE000100830BF0AF2872BCAC62E7F6841937C7A2135D5988388BE5009309EA76974A290AFE797EC420AC562B972A1ECB110C8A475352C8EC1ADD022BE5612E9405541E2EED8FDF1296BB9EB31E8ADCBB81413D61D6CD8308D97D73718289BBFFBEE77305D3B8675FEF2676F003A71A0B112EB5776521DF16AC27025C73DBA12F1E91E713C650C9F905181E549BB1551BDAA84F2051D079FED5D81CEAA1DCA4A34DAF6E5D1477C4A88B727C1780C918AA5172A92EE417500D568DF1F00CF16223713C5F72FE7A9C534AD83AD331B6468A97030CAA344310C955128F950055FB7A10434F1ED310BD9422236595467B50A6B3E5DA33A1F2E859C2273657739CA8CCE70C3C1C
padding = 0495A2AED26D20B4D93D7617
tmp_aes_key = C0AE07F359E603AE019348325A3FE140E375F720C5C6D2C10AEB06CA0E4D9D57
tmp_aes_iv = 451C92CCB113C91BD2488002975E2504B0186EE1450111840D5906603E94B4C7</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 = 2972F6F8B8F60A763B9B354CDAEE82840FD9EA2310156D74E43D07AD54C97B6690232A20FC71B26CECA538AB3EE460CC85F443BF2C87AC3E75D355751238D4A405F25F3954800CB91CB98B447608474F1423D9AE04E2BA52E5C8FCA0C7F80C82286C07EF88C8F778A6C120E0A97A9FCF8B4734C3F3BFE5A170300C1A402E68051B5293F72E1C731775A21CAE5C2C5217057A1E7AAF9FB7EBD02421992BB69BB24D03607DAEC57DF97284562BC88508C11F5228D4F09F16FAE729118FE51A9AB12B6271D46C4EDFC17CA51847DADB1EAD472C2EAD2281A844F8A655D25336E9042CD4396A3CF1AFC35B44D1DCB3C3EE53C2B9A14AD1A4B0FD309F41CDC4D3ECCC3BEE425C7D9F692DB8ACB0896506A870A947010FAEAE41FDE7EDC5774B733C4F1262A4A4665B27E139F85D6C24F6AC6A2E03B15B73880A5F9EAFE4E6547AAB60AFB18DA17EA838514FFB3B8C1EE647DB</code></pre>
<pre><code>encrypted_data = 43C6120427A24C91E43219FA479DBAB2625C8596B1C755CF095E0F6A48D18802E9192F0BB52788450D683F4336F6D6017C75A25EB43AE02F3DE269AB40E31CDFE1C3C026DE3F84B2B27DA4F5DE644E63BF98F6301522090F5F3514F767AFD0445AA94C46479C63466BEAD9E3B11F61A0A288C76F62332A64FB5774C3D0BD5859D23E7CD26F698500FEF7BDCC8C98FC95C4F4184EC603801F2B80C4D43B8701DCF9ECA5ABA1781F8210E6A0D4709E1185C02139620AFA985C416A31EE30D3A7119B3195FB45141920943D04339F624FD05E9240AF4247D8322D90A64F5A4331D735F83521A4A0FCB526D5294AFAF1F5517C278DB6EEACCE0D5CE510324F3F6E6943E17D45C35738E27955B7CAD246326B6E4AFB459FB843459CACEFFEBCA7F9F81E59BB5F06B4EE9FAA96B3588A7BE029DE0C750668DDCAA53D95A23F12A09A376F52F7F7216A4D811728A68DE2E3DB23</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 24 C0 03 00 B0 4D 99 66
0010 | 78 01 00 00 1F 5F 04 F5 A6 B2 F8 1F 8F DB 3D 17
0020 | 33 82 A6 28 5E 43 3C 5E 57 23 72 FC D6 8B D9 7F
0030 | 39 4B A8 98 AB 19 56 DE FE 50 01 00 29 72 F6 F8
0040 | B8 F6 0A 76 3B 9B 35 4C DA EE 82 84 0F D9 EA 23
0050 | 10 15 6D 74 E4 3D 07 AD 54 C9 7B 66 90 23 2A 20
0060 | FC 71 B2 6C EC A5 38 AB 3E E4 60 CC 85 F4 43 BF
0070 | 2C 87 AC 3E 75 D3 55 75 12 38 D4 A4 05 F2 5F 39
0080 | 54 80 0C B9 1C B9 8B 44 76 08 47 4F 14 23 D9 AE
0090 | 04 E2 BA 52 E5 C8 FC A0 C7 F8 0C 82 28 6C 07 EF
00A0 | 88 C8 F7 78 A6 C1 20 E0 A9 7A 9F CF 8B 47 34 C3
00B0 | F3 BF E5 A1 70 30 0C 1A 40 2E 68 05 1B 52 93 F7
00C0 | 2E 1C 73 17 75 A2 1C AE 5C 2C 52 17 05 7A 1E 7A
00D0 | AF 9F B7 EB D0 24 21 99 2B B6 9B B2 4D 03 60 7D
00E0 | AE C5 7D F9 72 84 56 2B C8 85 08 C1 1F 52 28 D4
00F0 | F0 9F 16 FA E7 29 11 8F E5 1A 9A B1 2B 62 71 D4
0100 | 6C 4E DF C1 7C A5 18 47 DA DB 1E AD 47 2C 2E AD
0110 | 22 81 A8 44 F8 A6 55 D2 53 36 E9 04 2C D4 39 6A
0120 | 3C F1 AF C3 5B 44 D1 DC B3 C3 EE 53 C2 B9 A1 4A
0130 | D1 A4 B0 FD 30 9F 41 CD C4 D3 EC CC 3B EE 42 5C
0140 | 7D 9F 69 2D B8 AC B0 89 65 06 A8 70 A9 47 01 0F
0150 | AE AE 41 FD E7 ED C5 77 4B 73 3C 4F 12 62 A4 A4
0160 | 66 5B 27 E1 39 F8 5D 6C 24 F6 AC 6A 2E 03 B1 5B
0170 | 73 88 0A 5F 9E AF E4 E6 54 7A AB 60 AF B1 8D A1
0180 | 7E A8 38 51 4F FB 3B 8C 1E E6 47 DB</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 08 E9 06 00 7A 5A 99 66
0010 | 78 01 00 00 1F 5F 04 F5 66 1D B0 4F 07 59 BA 01
0020 | 12 AF 0F 39 23 A2 49 6C 48 E1 4C F6 49 34 95 00
0030 | BF 9F 7D B9 A9 72 79 46 FE 50 01 00 43 C6 12 04
0040 | 27 A2 4C 91 E4 32 19 FA 47 9D BA B2 62 5C 85 96
0050 | B1 C7 55 CF 09 5E 0F 6A 48 D1 88 02 E9 19 2F 0B
0060 | B5 27 88 45 0D 68 3F 43 36 F6 D6 01 7C 75 A2 5E
0070 | B4 3A E0 2F 3D E2 69 AB 40 E3 1C DF E1 C3 C0 26
0080 | DE 3F 84 B2 B2 7D A4 F5 DE 64 4E 63 BF 98 F6 30
0090 | 15 22 09 0F 5F 35 14 F7 67 AF D0 44 5A A9 4C 46
00A0 | 47 9C 63 46 6B EA D9 E3 B1 1F 61 A0 A2 88 C7 6F
00B0 | 62 33 2A 64 FB 57 74 C3 D0 BD 58 59 D2 3E 7C D2
00C0 | 6F 69 85 00 FE F7 BD CC 8C 98 FC 95 C4 F4 18 4E
00D0 | C6 03 80 1F 2B 80 C4 D4 3B 87 01 DC F9 EC A5 AB
00E0 | A1 78 1F 82 10 E6 A0 D4 70 9E 11 85 C0 21 39 62
00F0 | 0A FA 98 5C 41 6A 31 EE 30 D3 A7 11 9B 31 95 FB
0100 | 45 14 19 20 94 3D 04 33 9F 62 4F D0 5E 92 40 AF
0110 | 42 47 D8 32 2D 90 A6 4F 5A 43 31 D7 35 F8 35 21
0120 | A4 A0 FC B5 26 D5 29 4A FA F1 F5 51 7C 27 8D B6
0130 | EE AC CE 0D 5C E5 10 32 4F 3F 6E 69 43 E1 7D 45
0140 | C3 57 38 E2 79 55 B7 CA D2 46 32 6B 6E 4A FB 45
0150 | 9F B8 43 45 9C AC EF FE BC A7 F9 F8 1E 59 BB 5F
0160 | 06 B4 EE 9F AA 96 B3 58 8A 7B E0 29 DE 0C 75 06
0170 | 68 DD CA A5 3D 95 A2 3F 12 A0 9A 37 6F 52 F7 F7
0180 | 21 6A 4D 81 17 28 A6 8D E2 E3 DB 23</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>24C00300B04D9966</code></td>
<td><code>08E906007A5A9966</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>A6B2F81F8FDB3D173382A6285E433C5E</code></td>
<td><code>661DB04F0759BA0112AF0F3923A2496C</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>572372FCD68BD97F394BA898AB1956DE</code></td>
<td><code>48E14CF649349500BF9F7DB9A9727946</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_data</td>
<td>56, 340</td>
<td><code>FE5001002972F6F8B8F60A763B9B354C</code> <code>DAEE82840FD9EA2310156D74E43D07AD</code> <code>54C97B6690232A20FC71B26CECA538AB</code> <code>3EE460CC85F443BF2C87AC3E75D35575</code> <code>1238D4A405F25F3954800CB91CB98B44</code> <code>7608474F1423D9AE04E2BA52E5C8FCA0</code> <code>C7F80C82286C07EF88C8F778A6C120E0</code> <code>A97A9FCF8B4734C3F3BFE5A170300C1A</code> <code>402E68051B5293F72E1C731775A21CAE</code> <code>5C2C5217057A1E7AAF9FB7EBD0242199</code> <code>2BB69BB24D03607DAEC57DF97284562B</code> <code>C88508C11F5228D4F09F16FAE729118F</code> <code>E51A9AB12B6271D46C4EDFC17CA51847</code> <code>DADB1EAD472C2EAD2281A844F8A655D2</code> <code>5336E9042CD4396A3CF1AFC35B44D1DC</code> <code>B3C3EE53C2B9A14AD1A4B0FD309F41CD</code> <code>C4D3ECCC3BEE425C7D9F692DB8ACB089</code> <code>6506A870A947010FAEAE41FDE7EDC577</code> <code>4B733C4F1262A4A4665B27E139F85D6C</code> <code>24F6AC6A2E03B15B73880A5F9EAFE4E6</code> <code>547AAB60AFB18DA17EA838514FFB3B8C</code><br> <code>1EE647DB</code></td>
<td><code>FE50010043C6120427A24C91E43219FA</code> <code>479DBAB2625C8596B1C755CF095E0F6A</code> <code>48D18802E9192F0BB52788450D683F43</code> <code>36F6D6017C75A25EB43AE02F3DE269AB</code> <code>40E31CDFE1C3C026DE3F84B2B27DA4F5</code> <code>DE644E63BF98F6301522090F5F3514F7</code> <code>67AFD0445AA94C46479C63466BEAD9E3</code> <code>B11F61A0A288C76F62332A64FB5774C3</code> <code>D0BD5859D23E7CD26F698500FEF7BDCC</code> <code>8C98FC95C4F4184EC603801F2B80C4D4</code> <code>3B8701DCF9ECA5ABA1781F8210E6A0D4</code> <code>709E1185C02139620AFA985C416A31EE</code> <code>30D3A7119B3195FB45141920943D0433</code> <code>9F624FD05E9240AF4247D8322D90A64F</code> <code>5A4331D735F83521A4A0FCB526D5294A</code> <code>FAF1F5517C278DB6EEACCE0D5CE51032</code> <code>4F3F6E6943E17D45C35738E27955B7CA</code> <code>D246326B6E4AFB459FB843459CACEFFE</code> <code>BCA7F9F81E59BB5F06B4EE9FAA96B358</code> <code>8A7BE029DE0C750668DDCAA53D95A23F</code> <code>12A09A376F52F7F7216A4D811728A68D</code><br> <code>E2E3DB23</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 = 71724462E7CBA8F41C0D5B3CC0020CB3C6265109EE49272995FBBA174F30C6A94BA1EDEAA5120D706BC5299F808B4914A07D8D81209E7654B92097E4F168B0F96D432B7D7B919B1ED870A07221AB0C1F6C4A7CB3F9925C4EDC23673D9BD9FD6B3C3EC157CB54DACD7F04BE900FC2F1100EE5C131AC3377CFAE8166337915BF3AFDB7693DCE5E17B9FDAFEDD50F6127C47384379AB70CCF814442C5DCA6013813643EB191C08646BA3C94712E5AB0A615DE022CBBFD5508981ADA93B5FC30E619C96F6E80148B5736772EF97F513EC5D8AA40CB1BEDEA11AE3B130D5DD091717C32E73EA051210553C95215F6EC9A68578C5D9B8748BD2F75028659EBB773EDAF</code></pre>
<pre><code>auth_key = B9837DDE70F14154F5365D8F1BA15272D77A62EC2249D1A87CD6C98FCC6464D4912437D4F93FD0170C291BD9ECF7DDB6028C1BDBECA0A8D817980D7FC868346FB88F5062B89DD6CF2B05D78A3CFE77C56F81D6F056C3ECFC6047042A0583F39200D51D9662105A744B12C7E7A1ABD2C40353C9E12527B14B4184175E6CA014264F46932B7637A8B1AF03C1368BA5685114F574D74A1C5FF97631E8087F3DF3A995AFAFB86DBE5D9DE8EA1F2A1FDBF4EF36EEB23A8F436FB4F4A72B942EECD1B648AA311CD2B0840C2EFB06B8B2024E148FF501ED61BD04774EA4E59EC1B458A4CA59520A806EAA7FE49ACE8058C174BDCD6D064E2F55D79BD64891A38AFCB594</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 54 48 0A B1 4D 99 66
0010 | 7C 00 00 00 34 F7 CB 3B A6 B2 F8 1F 8F DB 3D 17
0020 | 33 82 A6 28 5E 43 3C 5E 57 23 72 FC D6 8B D9 7F
0030 | 39 4B A8 98 AB 19 56 DE E1 34 34 5D C1 4B 2D A1
0040 | 74 21 33 B5 3C 2A BE 8F</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 14 C7 29 7B 5A 99 66
0010 | 64 00 00 00 34 F7 CB 3B 66 1D B0 4F 07 59 BA 01
0020 | 12 AF 0F 39 23 A2 49 6C 48 E1 4C F6 49 34 95 00
0030 | BF 9F 7D B9 A9 72 79 46 95 AB 21 37 B1 76 91 42
0040 | 7D A0 66 B8 06 E6 BD EF</code></pre>
<p>Payload (de)serialization:</p>
<pre><code>dh_gen_ok#3bcbf734 nonce:int128 server_nonce:int128 new_nonce_hash1:int128 = Set_client_DH_params_answer;</code></pre>
<table class="table">
@ -817,13 +817,13 @@ encrypted_data := AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv);<
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>0154480AB14D9966</code></td>
<td><code>0114C7297B5A9966</code></td>
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() &lt;&lt; 32) + (N*4)</td>
</tr>
<tr>
<td>message_length</td>
<td>16, 4</td>
<td><code>7C000000</code> (124 in decimal)</td>
<td><code>64000000</code> (100 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -835,19 +835,19 @@ encrypted_data := AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv);<
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>A6B2F81F8FDB3D173382A6285E433C5E</code></td>
<td><code>661DB04F0759BA0112AF0F3923A2496C</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>572372FCD68BD97F394BA898AB1956DE</code></td>
<td><code>48E14CF649349500BF9F7DB9A9727946</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce_hash1</td>
<td>56, 16</td>
<td><code>E134345DC14B2DA1742133B53C2ABE8F</code></td>
<td><code>95AB2137B17691427DA066B806E6BDEF</code></td>
<td>The 128 lower-order bits of SHA1 of the byte string derived from the <code>new_nonce</code> string by adding a single byte with the value of 1, 2, or 3, and followed by another 8 bytes with <code>auth_key_aux_hash</code>. Different values are required to prevent an intruder from changing server response dh_gen_ok into dh_gen_retry.</td>
</tr>
</tbody>

View file

@ -4,28 +4,10 @@
<meta charset="utf-8">
<title>OutboxReadDate</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="description" content="Constructors
Constructor
Description
outboxReadDate
 
Methods
Method
Description
messages.getOutboxReadDate
 ">
<meta property="description" content="Exact read date of a private message we sent to another user.">
<meta property="og:title" content="OutboxReadDate">
<meta property="og:image" content="">
<meta property="og:description" content="Constructors
Constructor
Description
outboxReadDate
 
Methods
Method
Description
messages.getOutboxReadDate
 ">
<meta property="og:description" content="Exact read date of a private message we sent to another user.">
<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 @@ messages.getOutboxReadDate
<div class="dev_page_bread_crumbs"><ul class="breadcrumb clearfix"><li><a href="/api" >API</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/schema" >TL-schema</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/type/OutboxReadDate" >OutboxReadDate</a></li></ul></div>
<h1 id="dev_page_title">OutboxReadDate</h1>
<div id="dev_page_content"><p><div class="clearfix">
<div id="dev_page_content"><p>Exact read date of a private message we sent to another user.</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 181 <b class="caret"></b></a>
@ -88,7 +71,7 @@ messages.getOutboxReadDate
<tbody>
<tr>
<td><a href="/constructor/outboxReadDate">outboxReadDate</a></td>
<td> </td>
<td>Exact read date of a private message we sent to another user.</td>
</tr>
</tbody>
</table>
@ -103,7 +86,7 @@ messages.getOutboxReadDate
<tbody>
<tr>
<td><a href="/method/messages.getOutboxReadDate">messages.getOutboxReadDate</a></td>
<td> </td>
<td>Get the exact read date of one of our messages, sent to a private chat with another user.<br><br>Can be only done for private outgoing messages not older than <a href="/api/config#pm-read-date-expire-period">appConfig.pm_read_date_expire_period »</a>.<br><br>If the <code>peer</code>'s <a href="/constructor/userFull">userFull</a>.<code>read_dates_private</code> flag is set, we will not be able to fetch the exact read date of messages we send to them, and a <code>USER_PRIVACY_RESTRICTED</code> RPC error will be emitted. <br>The exact read date of messages might still be unavailable for other reasons, see <a href="/constructor/globalPrivacySettings">here »</a> for more info. <br>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.</td>
</tr>
</tbody>
</table></div>

View file

@ -77,7 +77,7 @@
</tr>
<tr>
<td><a href="/constructor/webPageAttributeStickerSet">webPageAttributeStickerSet</a></td>
<td> </td>
<td>Contains info about a <a href="/api/stickers">stickerset »</a>, for a <a href="/constructor/webPage">webPage</a> preview of a <a href="/api/links#stickerset-links">stickerset deep link »</a> (the <a href="/constructor/webPage">webPage</a> will have a <code>type</code> of <code>telegram_stickerset</code>).</td>
</tr>
</tbody>
</table></div>