Update content of files

This commit is contained in:
GitHub Action 2024-07-24 18:15:24 +00:00
parent acf6a711e1
commit a6f37e932d
14 changed files with 245 additions and 226 deletions

View file

@ -571,11 +571,23 @@
<a href="/method/account.getConnectedBots">account.getConnectedBots</a>#4ea4c80f = <a href="/type/account.ConnectedBots">account.ConnectedBots</a>;<br>
<a href="/method/messages.toggleDialogFilterTags">messages.toggleDialogFilterTags</a>#fd2dda49 enabled:<a href="/type/Bool">Bool</a> = <a href="/type/Bool">Bool</a>;<br></code></pre></div>
<h3><a class="anchor" href="#layer-174" id="layer-174" name="layer-174"><i class="anchor-icon"></i></a><a href="/schema?layer=174">Layer 174</a></h3>
<p>This layer adds support for:</p>
<ul>
<li><a href="/api/boost">Boosts in supergroups »</a></li>
<li><a href="/api/boost#setting-a-custom-emoji-stickerset-for-supergroups">Custom emoji stickersets for supergroups »</a>, usable even by non-<a href="/api/premium">Premium</a> users!</li>
<li><a href="/api/boost#bypass-slowmode-and-chat-restrictions">Boost to bypass supergroup restrictions »</a></li>
<li><a href="/api/boost#changing-profile-accent-color-emoji">Profile accent colors/emojis for supergroups »</a></li>
<li>A new optional privacy setting to <a href="/api/privacy#require-premium-for-new-non-contact-users">allow new messages only from Premium users »</a></li>
<li><a href="/method/messages.getOutboxReadDate">Exact read dates in private messages »</a></li>
<li>Disabling signup notifications for new users via <a href="/method/auth.signUp">no_joined_notifications »</a></li>
<li>Improvements to <a href="/api/saved-messages#tags">saved message tags »</a> (search for tagged messages only in certain <a href="/api/saved-messages#saved-message-dialogs">saved message dialogs »</a>).</li>
<li><a href="/api/stories">Stories for groups</a></li>
</ul>
<h4><a class="anchor" href="#schema-changes" id="schema-changes" name="schema-changes"><i class="anchor-icon"></i></a>Schema changes</h4>
<h5><a class="anchor" href="#new-methods" id="new-methods" name="new-methods"><i class="anchor-icon"></i></a>New Methods</h5>
<ul>
<li>Added <a href="/method/messages.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/users.getIsPremiumRequiredToContact">users.getIsPremiumRequiredToContact</a> - Check whether we can write to the specified user (this method can only be called by non-<a href="/api/premium">Premium</a> users), 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>
</ul>

View file

@ -105,7 +105,8 @@
<p>Telegram allows placing chats into folders, based on their type, mute status, or other custom criteria, thanks to folder blacklists and whitelists.</p>
<h4><a class="anchor" href="#inputprivacykeystatustimestamp" id="inputprivacykeystatustimestamp" name="inputprivacykeystatustimestamp"><i class="anchor-icon"></i></a><a href="/constructor/inputPrivacyKeyStatusTimestamp">inputPrivacyKeyStatusTimestamp</a></h4>
<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>
<p>Note that if <em>we</em> decide to hide our exact last online timestamp to someone (i.e., users A, B, C, or all users) <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 those users (A, B, C, or all users), even if those users <em>do</em> share it with us.</p>
<p>If those users <em>do</em> share their exact online status with us, but we can't see it due to the reason mentioned above, the <code>by_me</code> flag of <a href="/constructor/userStatusRecently">userStatusRecently</a>, <a href="/constructor/userStatusLastWeek">userStatusLastWeek</a>, <a href="/constructor/userStatusLastMonth">userStatusLastMonth</a> will be set.</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>
@ -115,7 +116,7 @@ To set <a href="/constructor/userFull">userFull</a>.<code>read_dates_private</co
<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>
<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>
<p>Check whether we can write to the specified user (this method can only be called by non-<a href="/api/premium">Premium</a> users), 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="#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></div>

View file

@ -4,10 +4,10 @@
<meta charset="utf-8">
<title>inputPrivacyKeyStatusTimestamp</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="description" content="Whether people will be able to see our exact last online timestamp. Note that if we decide to hide our exact last online timestamp to someone and we do not have a Premium subscription, we won&#39;t be able to see the exact last online timestamp of any user, including those that do share it with us.">
<meta property="description" content="Whether people will be able to see our exact last online timestamp. Note that if we decide to hide our exact last online timestamp to someone (i.e., users A, B, C, or all users) and we do not have a Premium subscription, we won&#39;t be able to see the exact last online timestamp of those users (A, B, C, or all users), even if those users do share it with us. If those users do share their exact online status with us, but we can&#39;t see it due to the reason mentioned above, the by_me flag of userStatusRecently, userStatusLastWeek, userStatusLastMonth will be set.">
<meta property="og:title" content="inputPrivacyKeyStatusTimestamp">
<meta property="og:image" content="">
<meta property="og:description" content="Whether people will be able to see our exact last online timestamp. Note that if we decide to hide our exact last online timestamp to someone and we do not have a Premium subscription, we won&#39;t be able to see the exact last online timestamp of any user, including those that do share it with us.">
<meta property="og:description" content="Whether people will be able to see our exact last online timestamp. Note that if we decide to hide our exact last online timestamp to someone (i.e., users A, B, C, or all users) and we do not have a Premium subscription, we won&#39;t be able to see the exact last online timestamp of those users (A, B, C, or all users), even if those users do share it with us. If those users do share their exact online status with us, but we can&#39;t see it due to the reason mentioned above, the by_me flag of userStatusRecently, userStatusLastWeek, userStatusLastMonth will be set.">
<link rel="icon" type="image/svg+xml" href="/img/website_icon.svg?4">
<link rel="apple-touch-icon" sizes="180x180" href="/img/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/img/favicon-32x32.png">
@ -64,7 +64,13 @@
<p><a href="/type/InputPrivacyKey">InputPrivacyKey</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="#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></div>
<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="#userstatusrecently" id="userstatusrecently" name="userstatusrecently"><i class="anchor-icon"></i></a><a href="/constructor/userStatusRecently">userStatusRecently</a></h4>
<p>Online status: last seen recently</p>
<h4><a class="anchor" href="#userstatuslastweek" id="userstatuslastweek" name="userstatuslastweek"><i class="anchor-icon"></i></a><a href="/constructor/userStatusLastWeek">userStatusLastWeek</a></h4>
<p>Online status: last seen last week</p>
<h4><a class="anchor" href="#userstatuslastmonth" id="userstatuslastmonth" name="userstatuslastmonth"><i class="anchor-icon"></i></a><a href="/constructor/userStatusLastMonth">userStatusLastMonth</a></h4>
<p>Online status: last seen last month</p></div>
</div>

View file

@ -141,7 +141,7 @@
<tr>
<td><strong>apply_min_photo</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.25?<a href="/constructor/true">true</a></td>
<td>If set and <code>min</code> is set, the value of <code>photo</code> <strong>can</strong> be used to update the local database, see the documentation of that flag for more info.</td>
<td>If set and <code>min</code> is set, the value of <code>photo</code> can be used to update the local database, see the documentation of that flag for more info.</td>
</tr>
<tr>
<td><strong>fake</strong></td>
@ -156,7 +156,7 @@
<tr>
<td><strong>premium</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.28?<a href="/constructor/true">true</a></td>
<td>Whether this user is a Telegram Premium user <br>Changes to this flag should invalidate the local <a href="/constructor/userFull">userFull</a> cache for this user ID. <br>Changes to this flag if the <code>self</code> flag is set should also trigger the following calls, to refresh the respective caches: <br>- <a href="/method/help.getConfig">help.getConfig</a> <br>- <a href="/method/messages.getTopReactions">messages.getTopReactions</a> if the <code>bot</code> flag is <strong>not</strong> set</td>
<td>Whether this user is a Telegram Premium user <br>Changes to this flag should invalidate the local <a href="/constructor/userFull">userFull</a> cache for this user ID. <br>Changes to this flag if the <code>self</code> flag is set should also trigger the following calls, to refresh the respective caches: <br>- <a href="/method/help.getConfig">help.getConfig</a> <br>- <a href="/method/messages.getTopReactions">messages.getTopReactions</a> if the <code>bot</code> flag is <strong>not</strong> set</td>
</tr>
<tr>
<td><strong>attach_menu_enabled</strong></td>
@ -206,7 +206,7 @@
<tr>
<td><strong>access_hash</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.0?<a href="/type/long">long</a></td>
<td>Access hash of the user, see <a href="/api/peers#access-hash">here »</a> for more info. <br>If this flag is set, when updating the <a href="/api/peers">local peer database</a>, generate a virtual flag called <code>min_access_hash</code>, which is: <br>- Set to <code>true</code> if <code>min</code> is set AND <br>- The <code>phone</code> <em>flag</em> is <strong>not</strong> set OR <br>- The <code>phone</code> <em>flag</em> is set and the associated phone number string is <strong>non-empty</strong> <br>- Set to <code>false</code> otherwise. <br><br>Then, apply both <code>access_hash</code> and <code>min_access_hash</code> to the local database if: <br>- <code>min_access_hash</code> is false OR <br>- <code>min_access_hash</code> is true AND <br>- There is no locally cached object for this user OR <br>- There is no <code>access_hash</code> in the local cache OR <br>- The cached object's <code>min_access_hash</code> is also true <br>If the final merged object stored to the database has the <code>min_access_hash</code> field set to true, the related <code>access_hash</code> is <strong>only</strong> suitable to use in <a href="/constructor/inputPeerPhotoFileLocation"><code>inputPeerPhotoFileLocation</code> »</a>, to directly <a href="/api/files">download the profile pictures</a> of users, everywhere else a <code>inputPeer*FromMessage</code> constructor will have to be generated as specified <a href="/api/min">here »</a>. <br>Bots can also use min access hashes in some conditions, by passing <code>0</code> instead of the min access hash.</td>
<td>Access hash of the user, see <a href="/api/peers#access-hash">here »</a> for more info. <br>If this flag is set, when updating the <a href="/api/peers">local peer database</a>, generate a virtual flag called <code>min_access_hash</code>, which is: <br>- Set to <code>true</code> if <code>min</code> is set AND <br>- The <code>phone</code> flag is <strong>not</strong> set OR <br>- The <code>phone</code> flag is set and the associated phone number string is non-empty <br>- Set to <code>false</code> otherwise. <br><br>Then, apply both <code>access_hash</code> and <code>min_access_hash</code> to the local database if: <br>- <code>min_access_hash</code> is false OR <br>- <code>min_access_hash</code> is true AND <br>- There is no locally cached object for this user OR <br>- There is no <code>access_hash</code> in the local cache OR <br>- The cached object's <code>min_access_hash</code> is also true <br>If the final merged object stored to the database has the <code>min_access_hash</code> field set to true, the related <code>access_hash</code> is <strong>only</strong> suitable to use in <a href="/constructor/inputPeerPhotoFileLocation"><code>inputPeerPhotoFileLocation</code> »</a>, to directly <a href="/api/files">download the profile pictures</a> of users, everywhere else a <code>inputPeer*FromMessage</code> constructor will have to be generated as specified <a href="/api/min">here »</a>. <br>Bots can also use min access hashes in some conditions, by passing <code>0</code> instead of the min access hash.</td>
</tr>
<tr>
<td><strong>first_name</strong></td>
@ -311,7 +311,7 @@
<p>Unless specified otherwise, when updating the <a href="/api/peers">local peer database</a>, all fields from the newly received constructor take priority over the old constructor cached locally (including by removing fields that aren't set in the new constructor).</p>
<p>See <a href="https://github.com/tdlib/td/blob/cb164927417f22811c74cd8678ed4a5ab7cb80ba/td/telegram/UserManager.cpp#L2267">here »</a> for an implementation of the logic to use when updating the <a href="/api/peers">local user peer database</a>.</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>
<p>Check whether we can write to the specified user (this method can only be called by non-<a href="/api/premium">Premium</a> users), 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>

View file

@ -305,7 +305,7 @@
<p>Unless specified otherwise, when updating the <a href="/api/peers">local peer database</a>, all fields from the newly received constructor take priority over the old constructor cached locally (including by removing fields that aren't set in the new constructor).</p>
<p>See <a href="https://github.com/tdlib/td/blob/cb164927417f22811c74cd8678ed4a5ab7cb80ba/td/telegram/UserManager.cpp#L2267">here »</a> for an implementation of the logic to use when updating the <a href="/api/peers">local user peer database</a>.</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>
<p>Check whether we can write to the specified user (this method can only be called by non-<a href="/api/premium">Premium</a> users), 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="#messagesgetoutboxreaddate" id="messagesgetoutboxreaddate" name="messagesgetoutboxreaddate"><i class="anchor-icon"></i></a><a href="/method/messages.getOutboxReadDate">messages.getOutboxReadDate</a></h4>

View file

@ -86,7 +86,7 @@
<h4><a class="anchor" href="#privacykeystatustimestamp" id="privacykeystatustimestamp" name="privacykeystatustimestamp"><i class="anchor-icon"></i></a><a href="/constructor/privacyKeyStatusTimestamp">privacyKeyStatusTimestamp</a></h4>
<p>Whether we can see the last online timestamp of this user.</p>
<p>Note that if <em>we</em> decide to hide our exact last online timestamp to someone (i.e., users A, B, C, or all users) <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 those users (A, B, C, or all users), even if those users <em>do</em> share it with us.</p>
<p>If those users <em>do</em> share their exact online status with us, but we can't see it due to the reason mentioned above, the <code>by_me</code> flag of <a href="/constructor/userStatusRecently">userStatusRecently</a>, <a href="/constructor/userStatusLastWeek">userStatusLastWeek</a>, <a href="/constructor/userStatusLastMonth">userStatusLastMonth</a>.</p></div>
<p>If those users <em>do</em> share their exact online status with us, but we can't see it due to the reason mentioned above, the <code>by_me</code> flag of <a href="/constructor/userStatusRecently">userStatusRecently</a>, <a href="/constructor/userStatusLastWeek">userStatusLastWeek</a>, <a href="/constructor/userStatusLastMonth">userStatusLastMonth</a> will be set.</p></div>
</div>

View file

@ -86,7 +86,7 @@
<h4><a class="anchor" href="#privacykeystatustimestamp" id="privacykeystatustimestamp" name="privacykeystatustimestamp"><i class="anchor-icon"></i></a><a href="/constructor/privacyKeyStatusTimestamp">privacyKeyStatusTimestamp</a></h4>
<p>Whether we can see the last online timestamp of this user.</p>
<p>Note that if <em>we</em> decide to hide our exact last online timestamp to someone (i.e., users A, B, C, or all users) <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 those users (A, B, C, or all users), even if those users <em>do</em> share it with us.</p>
<p>If those users <em>do</em> share their exact online status with us, but we can't see it due to the reason mentioned above, the <code>by_me</code> flag of <a href="/constructor/userStatusRecently">userStatusRecently</a>, <a href="/constructor/userStatusLastWeek">userStatusLastWeek</a>, <a href="/constructor/userStatusLastMonth">userStatusLastMonth</a>.</p></div>
<p>If those users <em>do</em> share their exact online status with us, but we can't see it due to the reason mentioned above, the <code>by_me</code> flag of <a href="/constructor/userStatusRecently">userStatusRecently</a>, <a href="/constructor/userStatusLastWeek">userStatusLastWeek</a>, <a href="/constructor/userStatusLastMonth">userStatusLastMonth</a> will be set.</p></div>
</div>

View file

@ -86,7 +86,7 @@
<h4><a class="anchor" href="#privacykeystatustimestamp" id="privacykeystatustimestamp" name="privacykeystatustimestamp"><i class="anchor-icon"></i></a><a href="/constructor/privacyKeyStatusTimestamp">privacyKeyStatusTimestamp</a></h4>
<p>Whether we can see the last online timestamp of this user.</p>
<p>Note that if <em>we</em> decide to hide our exact last online timestamp to someone (i.e., users A, B, C, or all users) <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 those users (A, B, C, or all users), even if those users <em>do</em> share it with us.</p>
<p>If those users <em>do</em> share their exact online status with us, but we can't see it due to the reason mentioned above, the <code>by_me</code> flag of <a href="/constructor/userStatusRecently">userStatusRecently</a>, <a href="/constructor/userStatusLastWeek">userStatusLastWeek</a>, <a href="/constructor/userStatusLastMonth">userStatusLastMonth</a>.</p></div>
<p>If those users <em>do</em> share their exact online status with us, but we can't see it due to the reason mentioned above, the <code>by_me</code> flag of <a href="/constructor/userStatusRecently">userStatusRecently</a>, <a href="/constructor/userStatusLastWeek">userStatusLastWeek</a>, <a href="/constructor/userStatusLastMonth">userStatusLastMonth</a> will be set.</p></div>
</div>

View file

@ -77,7 +77,7 @@
<tr>
<td><strong>no_joined_notifications</strong></td>
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.0?<a href="/constructor/true">true</a></td>
<td> </td>
<td>If set, users on Telegram that have already added <code>phone_number</code> to their contacts will <em>not</em> receive signup notifications about this user.</td>
</tr>
<tr>
<td><strong>phone_number</strong></td>

View file

@ -4,10 +4,10 @@
<meta charset="utf-8">
<title>users.getIsPremiumRequiredToContact</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="description" content="Check whether we can write to the specified user (non-Premium users only), see here » for more info on the full flow.">
<meta property="description" content="Check whether we can write to the specified user (this method can only be called by non-Premium users), see here » for more info on the full flow.">
<meta property="og:title" content="users.getIsPremiumRequiredToContact">
<meta property="og:image" content="">
<meta property="og:description" content="Check whether we can write to the specified user (non-Premium users only), see here » for more info on the full flow.">
<meta property="og:description" content="Check whether we can write to the specified user (this method can only be called by non-Premium users), see here » for more info on the full flow.">
<link rel="icon" type="image/svg+xml" href="/img/website_icon.svg?4">
<link rel="apple-touch-icon" sizes="180x180" href="/img/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/img/favicon-32x32.png">

View file

@ -3407,7 +3407,7 @@ Look for updates of telegram&#39;s terms of service…">
</tr>
<tr>
<td><a href="/method/users.getIsPremiumRequiredToContact">users.getIsPremiumRequiredToContact</a></td>
<td>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.</td>
<td>Check whether we can write to the specified user (this method can only be called by non-<a href="/api/premium">Premium</a> users), see <a href="/api/privacy#require-premium-for-new-non-contact-users">here »</a> for more info on the full flow.</td>
</tr>
<tr>
<td><a href="/method/messages.setDefaultHistoryTTL">messages.setDefaultHistoryTTL</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 F8 87 0A 00 B1 3F A1 66
0010 | 14 00 00 00 F1 8E 7E BE 50 04 22 80 E4 B6 7C 30
0020 | 77 D4 A0 C1 2D 4D 1E C1</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 58 30 0C 00 7A 43 A1 66
0010 | 14 00 00 00 F1 8E 7E BE 66 CD 10 76 62 1B 9E 73
0020 | E9 F5 D2 63 5F 0C 1A 01</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>F8870A00B13FA166</code></td>
<td><code>58300C007A43A166</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>50042280E4B67C3077D4A0C12D4D1EC1</code></td>
<td><code>66CD1076621B9E73E9F5D2635F0C1A01</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 E8 2E 9C B1 3F A1 66
0010 | C0 00 00 00 63 24 16 05 50 04 22 80 E4 B6 7C 30
0020 | 77 D4 A0 C1 2D 4D 1E C1 F2 E4 63 9D 99 B8 10 5C
0030 | A2 0D 76 A0 5F D1 1F 84 08 11 82 5D 68 B2 4C 41
0040 | EF 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 7C 25 D6 7A 43 A1 66
0010 | A0 00 00 00 63 24 16 05 66 CD 10 76 62 1B 9E 73
0020 | E9 F5 D2 63 5F 0C 1A 01 26 AF A9 7C 5F D7 7F F1
0030 | E0 39 D1 40 00 ED 24 1D 08 18 E5 21 66 98 54 81
0040 | 05 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>01E82E9CB13FA166</code></td>
<td><code>017C25D67A43A166</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>C0000000</code> (192 in decimal)</td>
<td><code>A0000000</code> (160 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -150,19 +150,19 @@
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>50042280E4B67C3077D4A0C12D4D1EC1</code></td>
<td><code>66CD1076621B9E73E9F5D2635F0C1A01</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>F2E4639D99B8105CA20D76A05FD11F84</code></td>
<td><code>26AFA97C5FD77FF1E039D14000ED241D</code></td>
<td>Server-generated random number</td>
</tr>
<tr>
<td>pq</td>
<td>56, 12</td>
<td><code>0811825D68B24C41EF000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1261673549866484207</td>
<td><code>0818E5216698548105000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1793876751103066373</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 = 1261673549866484207</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>1261673549866484207 = 1016741911 * 1240898537</code></p>
<pre><code>p = 1016741911
q = 1240898537</code></pre>
<pre><code>pq = 1793876751103066373</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>1793876751103066373 = 1128986147 * 1588927159</code></p>
<pre><code>p = 1128986147
q = 1588927159</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 11 82 5D 68 B2 4C 41 EF 00 00 00
0010 | 04 3C 9A 40 17 00 00 00 04 49 F6 9B E9 00 00 00
0020 | 50 04 22 80 E4 B6 7C 30 77 D4 A0 C1 2D 4D 1E C1
0030 | F2 E4 63 9D 99 B8 10 5C A2 0D 76 A0 5F D1 1F 84
0040 | 3C 0C 10 14 DB E5 F8 D7 43 34 E9 60 36 75 C3 FA
0050 | C4 FA A7 96 C2 FC A6 45 F5 C4 C3 9F 90 50 49 7C
<pre><code>0000 | 95 5F F5 A9 08 18 E5 21 66 98 54 81 05 00 00 00
0010 | 04 43 4A F6 23 00 00 00 04 5E B5 1A B7 00 00 00
0020 | 66 CD 10 76 62 1B 9E 73 E9 F5 D2 63 5F 0C 1A 01
0030 | 26 AF A9 7C 5F D7 7F F1 E0 39 D1 40 00 ED 24 1D
0040 | 9A 87 9B 42 20 45 9F 61 DA D0 C6 96 12 A4 7A 3E
0050 | C0 07 6A B1 6E 06 36 4C 70 0D 14 53 3A 22 C6 6A
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 = 1240898537</code></pre>
<tr>
<td>pq</td>
<td>4, 12</td>
<td><code>0811825D68B24C41EF000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1261673549866484207</td>
<td><code>0818E5216698548105000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1793876751103066373</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>043C9A4017000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1016741911</td>
<td><code>04434AF623000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1128986147</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>0449F69BE9000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1240898537</td>
<td><code>045EB51AB7000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1588927159</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>50042280E4B67C3077D4A0C12D4D1EC1</code></td>
<td><code>66CD1076621B9E73E9F5D2635F0C1A01</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>48, 16</td>
<td><code>F2E4639D99B8105CA20D76A05FD11F84</code></td>
<td><code>26AFA97C5FD77FF1E039D14000ED241D</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce</td>
<td>64, 32</td>
<td><code>3C0C1014DBE5F8D74334E9603675C3FA</code> <code>C4FAA796C2FCA645F5C4C39F9050497C</code></td>
<td><code>9A879B4220459F61DAD0C69612A47A3E</code> <code>C0076AB16E06364C700D14533A22C66A</code></td>
<td>Client-generated random number</td>
</tr>
<tr>
@ -291,39 +291,39 @@ q = 1240898537</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 = 955FF5A90811825D68B24C41EF000000043C9A40170000000449F69BE900000050042280E4B67C3077D4A0C12D4D1EC1F2E4639D99B8105CA20D76A05FD11F843C0C1014DBE5F8D74334E9603675C3FAC4FAA796C2FCA645F5C4C39F9050497C02000000
random_padding_bytes = 164CC8038512BCF8178FDB95E42550E63A4D1215196110827BFF368AE5AF1969C0C250E0649806687C37A0882E2C08610F3EBD5DF39DC3221BA8332A8CA6DFDF1BCB5D7F57F15BD89A5F32148FED59A8439C5E68CEFA44C1D66D8F25</code></pre>
<pre><code>data = 955FF5A90818E521669854810500000004434AF623000000045EB51AB700000066CD1076621B9E73E9F5D2635F0C1A0126AFA97C5FD77FF1E039D14000ED241D9A879B4220459F61DAD0C69612A47A3EC0076AB16E06364C700D14533A22C66A02000000
random_padding_bytes = AC68E271EAEE1982E6AAE68D9D8BF850E7FF60921D8DF734798EA0D2BC3EB101027F4C7534517F48D6BC9E8541DF75F449C4758B88D72AB64B48F6A6B55F7613EBD18D7CD98CD53E42BEAE3425F3B57CB23B7DEA4910D5208F68C828</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 = B519E958BFD522D00D490335CAB2FEED9DE6F74BA8DB9887FCF54AEDFD3C5B4B383CE5E77EE0F033A22683DEA57D0BE279D680020499B10EDEE578B0DBB9C47C4B73F5EE3C60D36A16464371BA4D4AF2C86BE4CDBB6C940A0F2FF07FAEE5DC0AF7B478C34013DF745301221FFBA0A0D473D9CC8B2AD9A084366D31023E02D888F76C4772E118A0CE37FA7E0AB0704ED2F3DB67A691BA99AD41CC74D89AB6371DEBD3E1B98FAB0A951B90AD117B28081654DB8357F25C96EBEA9074561EE16D3B1AF516F8751C33D7839684D14B1CBA3004A98F3AB0D48DEA49ACF7D8E84A2849CB211BC1786371900FCC5AE0BD0177D7808B67FAFEF3B28E535CDE542E1C353A</code></pre>
<pre><code>encrypted_data = 653653CFB0757F413BB587CB19DAD439720270A1044E977861E5374030341977C54B1B479E995270816782C710D5DC842C9A60E9ECDC2B99E4214BAC4B2B248F29D32EB224981BFF4AF9864FB0CF9225F50B036DC714AD7C26385CA97B75ED09253A02AF66F3083E2B0B604FBC1CA175120037B92A891E2495DBD1CA086C4F283CE45760E24DAA9CA554204C68E2E6A7809DE6021AF626A8448F89CADB171D51B7E710EA78C6E8475F5445EB3CC15560AF846F9B19D39C7830621A04D14726E9893CB6795E96F6003A39B5E2521D58E50177BEDBCEBC5F545A71CE571043A60E17AEC6034ECE5DBF2DE0755242DA7807943BCC6987625C2A46F5F397502384ED</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 FC 87 0A 00 B1 3F A1 66
0010 | 40 01 00 00 BE E4 12 D7 50 04 22 80 E4 B6 7C 30
0020 | 77 D4 A0 C1 2D 4D 1E C1 F2 E4 63 9D 99 B8 10 5C
0030 | A2 0D 76 A0 5F D1 1F 84 04 3C 9A 40 17 00 00 00
0040 | 04 49 F6 9B E9 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 B5 19 E9 58 BF D5 22 D0 0D 49 03 35
0060 | CA B2 FE ED 9D E6 F7 4B A8 DB 98 87 FC F5 4A ED
0070 | FD 3C 5B 4B 38 3C E5 E7 7E E0 F0 33 A2 26 83 DE
0080 | A5 7D 0B E2 79 D6 80 02 04 99 B1 0E DE E5 78 B0
0090 | DB B9 C4 7C 4B 73 F5 EE 3C 60 D3 6A 16 46 43 71
00A0 | BA 4D 4A F2 C8 6B E4 CD BB 6C 94 0A 0F 2F F0 7F
00B0 | AE E5 DC 0A F7 B4 78 C3 40 13 DF 74 53 01 22 1F
00C0 | FB A0 A0 D4 73 D9 CC 8B 2A D9 A0 84 36 6D 31 02
00D0 | 3E 02 D8 88 F7 6C 47 72 E1 18 A0 CE 37 FA 7E 0A
00E0 | B0 70 4E D2 F3 DB 67 A6 91 BA 99 AD 41 CC 74 D8
00F0 | 9A B6 37 1D EB D3 E1 B9 8F AB 0A 95 1B 90 AD 11
0100 | 7B 28 08 16 54 DB 83 57 F2 5C 96 EB EA 90 74 56
0110 | 1E E1 6D 3B 1A F5 16 F8 75 1C 33 D7 83 96 84 D1
0120 | 4B 1C BA 30 04 A9 8F 3A B0 D4 8D EA 49 AC F7 D8
0130 | E8 4A 28 49 CB 21 1B C1 78 63 71 90 0F CC 5A E0
0140 | BD 01 77 D7 80 8B 67 FA FE F3 B2 8E 53 5C DE 54
0150 | 2E 1C 35 3A</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 40 3B 0F 00 7A 43 A1 66
0010 | 40 01 00 00 BE E4 12 D7 66 CD 10 76 62 1B 9E 73
0020 | E9 F5 D2 63 5F 0C 1A 01 26 AF A9 7C 5F D7 7F F1
0030 | E0 39 D1 40 00 ED 24 1D 04 43 4A F6 23 00 00 00
0040 | 04 5E B5 1A B7 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 65 36 53 CF B0 75 7F 41 3B B5 87 CB
0060 | 19 DA D4 39 72 02 70 A1 04 4E 97 78 61 E5 37 40
0070 | 30 34 19 77 C5 4B 1B 47 9E 99 52 70 81 67 82 C7
0080 | 10 D5 DC 84 2C 9A 60 E9 EC DC 2B 99 E4 21 4B AC
0090 | 4B 2B 24 8F 29 D3 2E B2 24 98 1B FF 4A F9 86 4F
00A0 | B0 CF 92 25 F5 0B 03 6D C7 14 AD 7C 26 38 5C A9
00B0 | 7B 75 ED 09 25 3A 02 AF 66 F3 08 3E 2B 0B 60 4F
00C0 | BC 1C A1 75 12 00 37 B9 2A 89 1E 24 95 DB D1 CA
00D0 | 08 6C 4F 28 3C E4 57 60 E2 4D AA 9C A5 54 20 4C
00E0 | 68 E2 E6 A7 80 9D E6 02 1A F6 26 A8 44 8F 89 CA
00F0 | DB 17 1D 51 B7 E7 10 EA 78 C6 E8 47 5F 54 45 EB
0100 | 3C C1 55 60 AF 84 6F 9B 19 D3 9C 78 30 62 1A 04
0110 | D1 47 26 E9 89 3C B6 79 5E 96 F6 00 3A 39 B5 E2
0120 | 52 1D 58 E5 01 77 BE DB CE BC 5F 54 5A 71 CE 57
0130 | 10 43 A6 0E 17 AE C6 03 4E CE 5D BF 2D E0 75 52
0140 | 42 DA 78 07 94 3B CC 69 87 62 5C 2A 46 F5 F3 97
0150 | 50 23 84 ED</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 = 164CC8038512BCF8178FDB95E42550E63A4D1215196110827BFF368AE
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>FC870A00B13FA166</code></td>
<td><code>403B0F007A43A166</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 = 164CC8038512BCF8178FDB95E42550E63A4D1215196110827BFF368AE
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>50042280E4B67C3077D4A0C12D4D1EC1</code></td>
<td><code>66CD1076621B9E73E9F5D2635F0C1A01</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>F2E4639D99B8105CA20D76A05FD11F84</code></td>
<td><code>26AFA97C5FD77FF1E039D14000ED241D</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>p</td>
<td>56, 8</td>
<td><code>043C9A4017000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1016741911</td>
<td><code>04434AF623000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1128986147</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>0449F69BE9000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1240898537</td>
<td><code>045EB51AB7000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1588927159</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 = 164CC8038512BCF8178FDB95E42550E63A4D1215196110827BFF368AE
<tr>
<td>encrypted_data</td>
<td>80, 260</td>
<td><code>FE000100B519E958BFD522D00D490335</code> <code>CAB2FEED9DE6F74BA8DB9887FCF54AED</code> <code>FD3C5B4B383CE5E77EE0F033A22683DE</code> <code>A57D0BE279D680020499B10EDEE578B0</code> <code>DBB9C47C4B73F5EE3C60D36A16464371</code> <code>BA4D4AF2C86BE4CDBB6C940A0F2FF07F</code> <code>AEE5DC0AF7B478C34013DF745301221F</code> <code>FBA0A0D473D9CC8B2AD9A084366D3102</code> <code>3E02D888F76C4772E118A0CE37FA7E0A</code> <code>B0704ED2F3DB67A691BA99AD41CC74D8</code> <code>9AB6371DEBD3E1B98FAB0A951B90AD11</code> <code>7B28081654DB8357F25C96EBEA907456</code> <code>1EE16D3B1AF516F8751C33D7839684D1</code> <code>4B1CBA3004A98F3AB0D48DEA49ACF7D8</code> <code>E84A2849CB211BC1786371900FCC5AE0</code> <code>BD0177D7808B67FAFEF3B28E535CDE54</code><br> <code>2E1C353A</code></td>
<td><code>FE000100653653CFB0757F413BB587CB</code> <code>19DAD439720270A1044E977861E53740</code> <code>30341977C54B1B479E995270816782C7</code> <code>10D5DC842C9A60E9ECDC2B99E4214BAC</code> <code>4B2B248F29D32EB224981BFF4AF9864F</code> <code>B0CF9225F50B036DC714AD7C26385CA9</code> <code>7B75ED09253A02AF66F3083E2B0B604F</code> <code>BC1CA175120037B92A891E2495DBD1CA</code> <code>086C4F283CE45760E24DAA9CA554204C</code> <code>68E2E6A7809DE6021AF626A8448F89CA</code> <code>DB171D51B7E710EA78C6E8475F5445EB</code> <code>3CC15560AF846F9B19D39C7830621A04</code> <code>D14726E9893CB6795E96F6003A39B5E2</code> <code>521D58E50177BEDBCEBC5F545A71CE57</code> <code>1043A60E17AEC6034ECE5DBF2DE07552</code> <code>42DA7807943BCC6987625C2A46F5F397</code><br> <code>502384ED</code></td>
<td>Value generated above</td>
</tr>
</tbody>
@ -402,47 +402,47 @@ random_padding_bytes = 164CC8038512BCF8178FDB95E42550E63A4D1215196110827BFF368AE
<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 58 8F 4D B2 3F A1 66
0010 | A0 02 00 00 5C 07 E8 D0 50 04 22 80 E4 B6 7C 30
0020 | 77 D4 A0 C1 2D 4D 1E C1 F2 E4 63 9D 99 B8 10 5C
0030 | A2 0D 76 A0 5F D1 1F 84 FE 50 02 00 10 5A A2 CB
0040 | D8 5D D3 3A 5D 1E F8 60 2F 11 A1 5F 25 40 61 F8
0050 | 9C E5 38 CB A2 74 A1 85 FE 0A 08 76 93 CC 62 B8
0060 | 00 CF A1 64 5F 9F 28 96 4F E7 97 66 B1 CF F0 48
0070 | BF 9E 38 ED 32 39 D0 D4 0D 09 54 FE C4 67 99 E4
0080 | 51 E2 65 AD 2D 8F 5C 09 1D 26 22 99 77 F8 3A D7
0090 | FA 9F D8 62 45 D2 F5 78 6A D0 C0 FB 79 AA 32 5A
00A0 | 95 91 7C 88 5B 87 DB 1F 27 3F 88 EE 9B 7D B1 8F
00B0 | 69 26 3B C7 10 C2 9C 3C 69 29 4C 85 BC 5A 3F 67
00C0 | 2F A9 66 AA 43 C9 0A A4 5E F5 96 13 9D 9D 61 C9
00D0 | 65 C5 57 BB 25 D3 EA 2E D7 3B AC A4 59 EF FE EF
00E0 | A8 AB 28 14 F5 6E 84 1B 31 E4 0D BD B9 77 58 FD
00F0 | DD 66 98 A6 86 C9 19 C2 07 C5 D6 7B 6E 35 0F 79
0100 | 28 02 4D 61 4C 63 BB 8B A9 9F 74 C4 D9 67 43 03
0110 | FB 37 EC D0 CE 54 02 49 97 84 ED C0 4B 21 5E F6
0120 | 7B 1B 55 15 C2 E6 71 D2 60 C4 83 03 C9 DB 49 8C
0130 | 64 44 AA E1 81 11 1C 84 9C 3E 90 8D 4F 56 18 FC
0140 | B5 09 26 FC 3F BD 4A 67 56 EF EF 9A 1E 9C 98 08
0150 | 65 2A E0 14 66 FF F6 E3 E9 DB 55 5F FA C9 11 06
0160 | F1 71 E0 5D 35 8A 76 27 74 AC A5 13 F5 78 03 6F
0170 | D8 07 8D CC CB 43 90 18 F6 D8 CE 7C 79 38 EA C5
0180 | A4 5E FC E2 40 9A 44 FD 04 25 47 D3 FD 16 E8 46
0190 | 66 19 09 A3 77 B1 CD 42 54 BF E5 1B 19 39 A4 FF
01A0 | 52 97 C5 A9 FF 7B 8F 4E D6 11 2D AD 5D 4C 3D 88
01B0 | E2 E1 28 D5 82 48 02 DC 75 51 4B 36 59 87 0B D5
01C0 | 6B 1C D4 70 F8 46 CE EA 6D 2A 23 AC 69 67 41 F1
01D0 | 61 42 A1 3F 49 0D 47 AE 29 06 EF AA 07 35 F9 91
01E0 | D6 9F B8 8D 7A D4 CF A5 40 A1 AA FA 5C 7F 6E CB
01F0 | CE FB BD 9C DA BF C0 D7 89 E3 CC A6 DE 30 42 EC
0200 | DF 52 42 33 21 8C 41 9A 8A 3C 18 7F 25 51 A4 80
0210 | D2 7D B9 C8 76 F6 72 EF 39 D2 BC 8F 8B 95 B7 0A
0220 | 84 F7 5D 24 C5 4D 62 55 A2 F8 75 1A 38 FC C6 4E
0230 | EA 08 96 DE 76 CE C5 8D 89 9E FA 8B 20 AF 3C FC
0240 | 57 9C 36 14 D5 A9 5E 2C 6E B9 A2 04 86 11 1A 80
0250 | B2 47 12 D3 CC 50 D3 E1 67 A5 C7 08 9A 63 EE 6F
0260 | AF 1C 60 DF 63 57 F8 81 C4 E2 AF DC 58 C6 91 C7
0270 | 08 3D 76 39 DC CE 5E 1D FF F0 B4 1E F5 77 BC B8
0280 | 4C C1 80 3D 71 24 D3 98 CD 5B 6F 97</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 E0 8B A3 7B 43 A1 66
0010 | A4 02 00 00 5C 07 E8 D0 66 CD 10 76 62 1B 9E 73
0020 | E9 F5 D2 63 5F 0C 1A 01 26 AF A9 7C 5F D7 7F F1
0030 | E0 39 D1 40 00 ED 24 1D FE 50 02 00 18 B9 1A 33
0040 | DE F8 5A FB 14 DF CA 63 35 97 CD BA B2 C2 34 4D
0050 | 8A F8 F5 44 20 5E 48 63 F1 D3 40 77 F9 77 1C 75
0060 | 8D 22 7D BA A3 BB 9F 3C FE F7 2F 5C 79 CC 3C D0
0070 | 59 28 8F CC 65 16 46 19 3E 13 BD CA 93 A2 23 E5
0080 | 04 0B C3 0F 3F 90 2A 11 12 90 65 B4 8A 65 0E FB
0090 | F6 76 CF 71 38 C2 1C 33 5F 40 EC AE BA E9 CD A4
00A0 | 3D 39 D4 A3 58 55 99 92 3B 15 FC FA C8 97 A2 8D
00B0 | B5 0B 54 7D 9A B2 D9 B7 B0 40 5B 65 93 03 6D 12
00C0 | FA 41 50 0F 3A 03 F7 E9 C6 24 B0 6B C1 A4 D9 16
00D0 | 94 1C 39 0F 63 D5 F5 18 09 43 D3 F8 0C 3F E5 30
00E0 | 07 96 55 E2 3C 4C 1E B2 2A 9F FE A3 72 E6 6A 41
00F0 | 7D 60 4F D6 D0 5F 34 35 88 C2 BC 8F 92 7A 84 44
0100 | 7B EF CA 8B C9 0B E1 2C D2 37 37 6D 16 73 17 12
0110 | 6A D2 5E 7C 2A 80 83 70 CF 9D 63 88 CC CE 13 CC
0120 | 49 F8 EA E4 A3 6C 97 44 F3 11 CB 79 60 05 04 E1
0130 | A0 5B F2 16 71 A1 BA AA 52 D3 8F 38 3E F5 6C BD
0140 | 6B A4 D5 E9 14 A9 35 50 FF 74 CC E1 DA 5E CD 5C
0150 | 77 ED AF 39 F5 AC BE 7E 8D BE 21 DF FB 1A 99 80
0160 | 99 D4 13 47 09 5E E9 B7 5D 2E 63 E7 45 D1 1B 00
0170 | 4B DF 79 46 FA 8C A7 AF 0F 08 BA 2D 8A 41 BA 9B
0180 | 8F B2 7B 25 DD 5F 5E 28 CF B7 C0 90 58 D4 C4 ED
0190 | DF F7 FB E8 33 EC FB 98 C3 BC 36 C3 EC E4 52 15
01A0 | 95 F2 24 6F DB 05 D9 C3 03 2A 24 A9 85 A7 89 5F
01B0 | 3A 84 B4 A7 7C 6D 6E 19 5A 58 94 46 79 69 44 E6
01C0 | B5 4E B0 87 55 CD 4F 03 C5 07 A1 F8 86 54 51 C4
01D0 | 4B F3 DB 53 DA 1F 95 DD 8F 0D 16 42 41 C0 84 43
01E0 | 8F AC F5 DD 5C E9 1E 1F BA B4 AE 23 DF 58 88 EA
01F0 | 49 70 5D 85 88 7F 37 40 D2 FD 13 87 AD D0 F1 D0
0200 | B5 97 69 E7 A1 24 72 13 7A 65 99 BB 08 02 5B 37
0210 | 96 69 5E 34 3F 39 33 BF AF 19 DA 9B 9D 13 52 E8
0220 | A5 ED 5D 01 3B 11 84 86 AC F9 76 B8 AA E8 65 36
0230 | 2C 20 9C B4 92 A9 34 7E 09 B3 01 36 9D E8 C5 6D
0240 | E5 06 1E DE D3 7C B5 E3 1D FA 98 DB 4A 27 73 FB
0250 | 07 36 A1 87 ED 5F 46 92 2D 37 44 6F 1C 6E 26 DD
0260 | 64 CC 1C D1 A3 8C 07 D9 9A CA FB F7 C6 09 91 03
0270 | BA A4 93 2C C1 A2 8F D0 C3 5B 2D 6C FB 9D 73 F9
0280 | F3 FD 90 06 DD DA B1 3D 23 08 5D 80</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 = 164CC8038512BCF8178FDB95E42550E63A4D1215196110827BFF368AE
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>01588F4DB23FA166</code></td>
<td><code>01E08BA37B43A166</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>A0020000</code> (672 in decimal)</td>
<td><code>A4020000</code> (676 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -482,19 +482,19 @@ random_padding_bytes = 164CC8038512BCF8178FDB95E42550E63A4D1215196110827BFF368AE
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>50042280E4B67C3077D4A0C12D4D1EC1</code></td>
<td><code>66CD1076621B9E73E9F5D2635F0C1A01</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>F2E4639D99B8105CA20D76A05FD11F84</code></td>
<td><code>26AFA97C5FD77FF1E039D14000ED241D</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_answer</td>
<td>56, 596</td>
<td><code>FE500200105AA2CBD85DD33A5D1EF860</code> <code>2F11A15F254061F89CE538CBA274A185</code> <code>FE0A087693CC62B800CFA1645F9F2896</code> <code>4FE79766B1CFF048BF9E38ED3239D0D4</code> <code>0D0954FEC46799E451E265AD2D8F5C09</code> <code>1D26229977F83AD7FA9FD86245D2F578</code> <code>6AD0C0FB79AA325A95917C885B87DB1F</code> <code>273F88EE9B7DB18F69263BC710C29C3C</code> <code>69294C85BC5A3F672FA966AA43C90AA4</code> <code>5EF596139D9D61C965C557BB25D3EA2E</code> <code>D73BACA459EFFEEFA8AB2814F56E841B</code> <code>31E40DBDB97758FDDD6698A686C919C2</code> <code>07C5D67B6E350F7928024D614C63BB8B</code> <code>A99F74C4D9674303FB37ECD0CE540249</code> <code>9784EDC04B215EF67B1B5515C2E671D2</code> <code>60C48303C9DB498C6444AAE181111C84</code> <code>9C3E908D4F5618FCB50926FC3FBD4A67</code> <code>56EFEF9A1E9C9808652AE01466FFF6E3</code> <code>E9DB555FFAC91106F171E05D358A7627</code> <code>74ACA513F578036FD8078DCCCB439018</code> <code>F6D8CE7C7938EAC5A45EFCE2409A44FD</code> <code>042547D3FD16E846661909A377B1CD42</code> <code>54BFE51B1939A4FF5297C5A9FF7B8F4E</code> <code>D6112DAD5D4C3D88E2E128D5824802DC</code> <code>75514B3659870BD56B1CD470F846CEEA</code> <code>6D2A23AC696741F16142A13F490D47AE</code> <code>2906EFAA0735F991D69FB88D7AD4CFA5</code> <code>40A1AAFA5C7F6ECBCEFBBD9CDABFC0D7</code> <code>89E3CCA6DE3042ECDF524233218C419A</code> <code>8A3C187F2551A480D27DB9C876F672EF</code> <code>39D2BC8F8B95B70A84F75D24C54D6255</code> <code>A2F8751A38FCC64EEA0896DE76CEC58D</code> <code>899EFA8B20AF3CFC579C3614D5A95E2C</code> <code>6EB9A20486111A80B24712D3CC50D3E1</code> <code>67A5C7089A63EE6FAF1C60DF6357F881</code> <code>C4E2AFDC58C691C7083D7639DCCE5E1D</code> <code>FFF0B41EF577BCB84CC1803D7124D398</code><br> <code>CD5B6F97</code></td>
<td><code>FE50020018B91A33DEF85AFB14DFCA63</code> <code>3597CDBAB2C2344D8AF8F544205E4863</code> <code>F1D34077F9771C758D227DBAA3BB9F3C</code> <code>FEF72F5C79CC3CD059288FCC65164619</code> <code>3E13BDCA93A223E5040BC30F3F902A11</code> <code>129065B48A650EFBF676CF7138C21C33</code> <code>5F40ECAEBAE9CDA43D39D4A358559992</code> <code>3B15FCFAC897A28DB50B547D9AB2D9B7</code> <code>B0405B6593036D12FA41500F3A03F7E9</code> <code>C624B06BC1A4D916941C390F63D5F518</code> <code>0943D3F80C3FE530079655E23C4C1EB2</code> <code>2A9FFEA372E66A417D604FD6D05F3435</code> <code>88C2BC8F927A84447BEFCA8BC90BE12C</code> <code>D237376D167317126AD25E7C2A808370</code> <code>CF9D6388CCCE13CC49F8EAE4A36C9744</code> <code>F311CB79600504E1A05BF21671A1BAAA</code> <code>52D38F383EF56CBD6BA4D5E914A93550</code> <code>FF74CCE1DA5ECD5C77EDAF39F5ACBE7E</code> <code>8DBE21DFFB1A998099D41347095EE9B7</code> <code>5D2E63E745D11B004BDF7946FA8CA7AF</code> <code>0F08BA2D8A41BA9B8FB27B25DD5F5E28</code> <code>CFB7C09058D4C4EDDFF7FBE833ECFB98</code> <code>C3BC36C3ECE4521595F2246FDB05D9C3</code> <code>032A24A985A7895F3A84B4A77C6D6E19</code> <code>5A589446796944E6B54EB08755CD4F03</code> <code>C507A1F8865451C44BF3DB53DA1F95DD</code> <code>8F0D164241C084438FACF5DD5CE91E1F</code> <code>BAB4AE23DF5888EA49705D85887F3740</code> <code>D2FD1387ADD0F1D0B59769E7A1247213</code> <code>7A6599BB08025B3796695E343F3933BF</code> <code>AF19DA9B9D1352E8A5ED5D013B118486</code> <code>ACF976B8AAE865362C209CB492A9347E</code> <code>09B301369DE8C56DE5061EDED37CB5E3</code> <code>1DFA98DB4A2773FB0736A187ED5F4692</code> <code>2D37446F1C6E26DD64CC1CD1A38C07D9</code> <code>9ACAFBF7C6099103BAA4932CC1A28FD0</code> <code>C35B2D6CFB9D73F9F3FD9006DDDAB13D</code><br> <code>23085D80</code></td>
<td>See below</td>
</tr>
</tbody>
@ -502,20 +502,20 @@ random_padding_bytes = 164CC8038512BCF8178FDB95E42550E63A4D1215196110827BFF368AE
<!-- 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 = 105AA2CBD85DD33A5D1EF8602F11A15F254061F89CE538CBA274A185FE0A087693CC62B800CFA1645F9F28964FE79766B1CFF048BF9E38ED3239D0D40D0954FEC46799E451E265AD2D8F5C091D26229977F83AD7FA9FD86245D2F5786AD0C0FB79AA325A95917C885B87DB1F273F88EE9B7DB18F69263BC710C29C3C69294C85BC5A3F672FA966AA43C90AA45EF596139D9D61C965C557BB25D3EA2ED73BACA459EFFEEFA8AB2814F56E841B31E40DBDB97758FDDD6698A686C919C207C5D67B6E350F7928024D614C63BB8BA99F74C4D9674303FB37ECD0CE5402499784EDC04B215EF67B1B5515C2E671D260C48303C9DB498C6444AAE181111C849C3E908D4F5618FCB50926FC3FBD4A6756EFEF9A1E9C9808652AE01466FFF6E3E9DB555FFAC91106F171E05D358A762774ACA513F578036FD8078DCCCB439018F6D8CE7C7938EAC5A45EFCE2409A44FD042547D3FD16E846661909A377B1CD4254BFE51B1939A4FF5297C5A9FF7B8F4ED6112DAD5D4C3D88E2E128D5824802DC75514B3659870BD56B1CD470F846CEEA6D2A23AC696741F16142A13F490D47AE2906EFAA0735F991D69FB88D7AD4CFA540A1AAFA5C7F6ECBCEFBBD9CDABFC0D789E3CCA6DE3042ECDF524233218C419A8A3C187F2551A480D27DB9C876F672EF39D2BC8F8B95B70A84F75D24C54D6255A2F8751A38FCC64EEA0896DE76CEC58D899EFA8B20AF3CFC579C3614D5A95E2C6EB9A20486111A80B24712D3CC50D3E167A5C7089A63EE6FAF1C60DF6357F881C4E2AFDC58C691C7083D7639DCCE5E1DFFF0B41EF577BCB84CC1803D7124D398CD5B6F97
tmp_aes_key = 0862009CDA343B604C16E1FB67162F4A6E0328779435AE8B32B844D8B8AE1B27
tmp_aes_iv = D322BF7B0FE3405722AE697F94816E143A5EB539D3129610D71EA71C3C0C1014</code></pre>
<pre><code>encrypted_answer = 18B91A33DEF85AFB14DFCA633597CDBAB2C2344D8AF8F544205E4863F1D34077F9771C758D227DBAA3BB9F3CFEF72F5C79CC3CD059288FCC651646193E13BDCA93A223E5040BC30F3F902A11129065B48A650EFBF676CF7138C21C335F40ECAEBAE9CDA43D39D4A3585599923B15FCFAC897A28DB50B547D9AB2D9B7B0405B6593036D12FA41500F3A03F7E9C624B06BC1A4D916941C390F63D5F5180943D3F80C3FE530079655E23C4C1EB22A9FFEA372E66A417D604FD6D05F343588C2BC8F927A84447BEFCA8BC90BE12CD237376D167317126AD25E7C2A808370CF9D6388CCCE13CC49F8EAE4A36C9744F311CB79600504E1A05BF21671A1BAAA52D38F383EF56CBD6BA4D5E914A93550FF74CCE1DA5ECD5C77EDAF39F5ACBE7E8DBE21DFFB1A998099D41347095EE9B75D2E63E745D11B004BDF7946FA8CA7AF0F08BA2D8A41BA9B8FB27B25DD5F5E28CFB7C09058D4C4EDDFF7FBE833ECFB98C3BC36C3ECE4521595F2246FDB05D9C3032A24A985A7895F3A84B4A77C6D6E195A589446796944E6B54EB08755CD4F03C507A1F8865451C44BF3DB53DA1F95DD8F0D164241C084438FACF5DD5CE91E1FBAB4AE23DF5888EA49705D85887F3740D2FD1387ADD0F1D0B59769E7A12472137A6599BB08025B3796695E343F3933BFAF19DA9B9D1352E8A5ED5D013B118486ACF976B8AAE865362C209CB492A9347E09B301369DE8C56DE5061EDED37CB5E31DFA98DB4A2773FB0736A187ED5F46922D37446F1C6E26DD64CC1CD1A38C07D99ACAFBF7C6099103BAA4932CC1A28FD0C35B2D6CFB9D73F9F3FD9006DDDAB13D23085D80
tmp_aes_key = 9C9BB7C3AA015DBE62FE5577D0C089EF7C0A6EE4350CAC3BEE267C92AF846BBF
tmp_aes_iv = E8F23793463529F1EBDB9B64830F0D3FDD9F5AD447CBBFF257E7385F9A879B42</code></pre>
<!-- end server_DH_inner_data_input -->
<p>Yielding:</p>
<!-- start server_DH_inner_data_output -->
<pre><code>answer_with_hash = 15989B2F251AB8C10E1E412DAFCA6D7A6E352BCABA0D89B550042280E4B67C3077D4A0C12D4D1EC1F2E4639D99B8105CA20D76A05FD11F8403000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100AF72F3963FDBA1665B55447FD1D6E0085A7B44999E834CE16D600DA97DD44E70D4AFE2C8BDD51B7B1CD921D566A9D89CAE5CA7BF4C88DA694EAEC3ECA1A938FE626D3A1D2ED84D9404ABC37ED8629A638F8591F441A21F4BE3388FDE34B271C9692F2EBD1F3BAB1A6CE391A0401D3F0417FFF96609178D4CF3D3CE1564264DD6266719A559BB5E40A6B69955BBBE32F0CFB7BDAA0B3A52CD1A6A72B87C9EE66495C1ACCCA3BDA8299229D0045D59F9795BD3B38FC7A54EE590200E95EE7C739EA80ADEE55649226009BC14D36797613DC4220B126631A41371739FD63F3FAE3E5219B9164E45EA8BFEBF57B239655B1745D73065C05E7A3DD69F0331AFF4B59EB23FA1663946F5D0F640DDA7
answer = BA0D89B550042280E4B67C3077D4A0C12D4D1EC1F2E4639D99B8105CA20D76A05FD11F8403000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100AF72F3963FDBA1665B55447FD1D6E0085A7B44999E834CE16D600DA97DD44E70D4AFE2C8BDD51B7B1CD921D566A9D89CAE5CA7BF4C88DA694EAEC3ECA1A938FE626D3A1D2ED84D9404ABC37ED8629A638F8591F441A21F4BE3388FDE34B271C9692F2EBD1F3BAB1A6CE391A0401D3F0417FFF96609178D4CF3D3CE1564264DD6266719A559BB5E40A6B69955BBBE32F0CFB7BDAA0B3A52CD1A6A72B87C9EE66495C1ACCCA3BDA8299229D0045D59F9795BD3B38FC7A54EE590200E95EE7C739EA80ADEE55649226009BC14D36797613DC4220B126631A41371739FD63F3FAE3E5219B9164E45EA8BFEBF57B239655B1745D73065C05E7A3DD69F0331AFF4B59EB23FA1663946F5D0F640DDA7</code></pre>
<pre><code>answer_with_hash = 410295692DFDDE1C218D38A7F377C196FCBF538BBA0D89B566CD1076621B9E73E9F5D2635F0C1A0126AFA97C5FD77FF1E039D14000ED241D03000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100BBCC9D18A34899FB13B987A3CDCD838DCE934554B98753F095E890A9B2934D144F8E07531A5522636C85B594D1576A0C56C1C29C99421294238FE8006B59EC9EF5BE48DE208B3134FED5415256A61DB92FF630B341DFFB475CC3BAFA8C8578BDD5CD41C7EC15D05436BC6E30BBD00A76FC79CD743966153C8D0DC39083E4DF249B30F7E98261112410DFBC70C9699C1CD4233650D57BB91EE1BD381294807DCA26DEE3EBF37ADD9E361E4DCA6CA35F539605116EF1D7412933E45651A1C2E9EF67BC393FB9E71036429D7B66528543DD657C300436C968DE7A033A1E550E22E825A3F7481AF4BBB7DADAF640EF265788813546C7F9898F2E8CDD45A6889FD1637B43A16627A4C8D9D2F1C26B
answer = BA0D89B566CD1076621B9E73E9F5D2635F0C1A0126AFA97C5FD77FF1E039D14000ED241D03000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100BBCC9D18A34899FB13B987A3CDCD838DCE934554B98753F095E890A9B2934D144F8E07531A5522636C85B594D1576A0C56C1C29C99421294238FE8006B59EC9EF5BE48DE208B3134FED5415256A61DB92FF630B341DFFB475CC3BAFA8C8578BDD5CD41C7EC15D05436BC6E30BBD00A76FC79CD743966153C8D0DC39083E4DF249B30F7E98261112410DFBC70C9699C1CD4233650D57BB91EE1BD381294807DCA26DEE3EBF37ADD9E361E4DCA6CA35F539605116EF1D7412933E45651A1C2E9EF67BC393FB9E71036429D7B66528543DD657C300436C968DE7A033A1E550E22E825A3F7481AF4BBB7DADAF640EF265788813546C7F9898F2E8CDD45A6889FD1637B43A16627A4C8D9D2F1C26B</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 50 04 22 80 E4 B6 7C 30 77 D4 A0 C1
0010 | 2D 4D 1E C1 F2 E4 63 9D 99 B8 10 5C A2 0D 76 A0
0020 | 5F D1 1F 84 03 00 00 00 FE 00 01 00 C7 1C AE B9
<pre><code>0000 | BA 0D 89 B5 66 CD 10 76 62 1B 9E 73 E9 F5 D2 63
0010 | 5F 0C 1A 01 26 AF A9 7C 5F D7 7F F1 E0 39 D1 40
0020 | 00 ED 24 1D 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 = BA0D89B550042280E4B67C3077D4A0C12D4D1EC1F2E4639D99B8105CA20D76A05FD11F8
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 | AF 72 F3 96 3F DB A1 66 5B 55 44 7F D1 D6 E0 08
0140 | 5A 7B 44 99 9E 83 4C E1 6D 60 0D A9 7D D4 4E 70
0150 | D4 AF E2 C8 BD D5 1B 7B 1C D9 21 D5 66 A9 D8 9C
0160 | AE 5C A7 BF 4C 88 DA 69 4E AE C3 EC A1 A9 38 FE
0170 | 62 6D 3A 1D 2E D8 4D 94 04 AB C3 7E D8 62 9A 63
0180 | 8F 85 91 F4 41 A2 1F 4B E3 38 8F DE 34 B2 71 C9
0190 | 69 2F 2E BD 1F 3B AB 1A 6C E3 91 A0 40 1D 3F 04
01A0 | 17 FF F9 66 09 17 8D 4C F3 D3 CE 15 64 26 4D D6
01B0 | 26 67 19 A5 59 BB 5E 40 A6 B6 99 55 BB BE 32 F0
01C0 | CF B7 BD AA 0B 3A 52 CD 1A 6A 72 B8 7C 9E E6 64
01D0 | 95 C1 AC CC A3 BD A8 29 92 29 D0 04 5D 59 F9 79
01E0 | 5B D3 B3 8F C7 A5 4E E5 90 20 0E 95 EE 7C 73 9E
01F0 | A8 0A DE E5 56 49 22 60 09 BC 14 D3 67 97 61 3D
0200 | C4 22 0B 12 66 31 A4 13 71 73 9F D6 3F 3F AE 3E
0210 | 52 19 B9 16 4E 45 EA 8B FE BF 57 B2 39 65 5B 17
0220 | 45 D7 30 65 C0 5E 7A 3D D6 9F 03 31 AF F4 B5 9E
0230 | B2 3F A1 66</code></pre>
0130 | BB CC 9D 18 A3 48 99 FB 13 B9 87 A3 CD CD 83 8D
0140 | CE 93 45 54 B9 87 53 F0 95 E8 90 A9 B2 93 4D 14
0150 | 4F 8E 07 53 1A 55 22 63 6C 85 B5 94 D1 57 6A 0C
0160 | 56 C1 C2 9C 99 42 12 94 23 8F E8 00 6B 59 EC 9E
0170 | F5 BE 48 DE 20 8B 31 34 FE D5 41 52 56 A6 1D B9
0180 | 2F F6 30 B3 41 DF FB 47 5C C3 BA FA 8C 85 78 BD
0190 | D5 CD 41 C7 EC 15 D0 54 36 BC 6E 30 BB D0 0A 76
01A0 | FC 79 CD 74 39 66 15 3C 8D 0D C3 90 83 E4 DF 24
01B0 | 9B 30 F7 E9 82 61 11 24 10 DF BC 70 C9 69 9C 1C
01C0 | D4 23 36 50 D5 7B B9 1E E1 BD 38 12 94 80 7D CA
01D0 | 26 DE E3 EB F3 7A DD 9E 36 1E 4D CA 6C A3 5F 53
01E0 | 96 05 11 6E F1 D7 41 29 33 E4 56 51 A1 C2 E9 EF
01F0 | 67 BC 39 3F B9 E7 10 36 42 9D 7B 66 52 85 43 DD
0200 | 65 7C 30 04 36 C9 68 DE 7A 03 3A 1E 55 0E 22 E8
0210 | 25 A3 F7 48 1A F4 BB B7 DA DA F6 40 EF 26 57 88
0220 | 81 35 46 C7 F9 89 8F 2E 8C DD 45 A6 88 9F D1 63
0230 | 7B 43 A1 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 = BA0D89B550042280E4B67C3077D4A0C12D4D1EC1F2E4639D99B8105CA20D76A05FD11F8
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>50042280E4B67C3077D4A0C12D4D1EC1</code></td>
<td><code>66CD1076621B9E73E9F5D2635F0C1A01</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>F2E4639D99B8105CA20D76A05FD11F84</code></td>
<td><code>26AFA97C5FD77FF1E039D14000ED241D</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
@ -594,13 +594,13 @@ answer = BA0D89B550042280E4B67C3077D4A0C12D4D1EC1F2E4639D99B8105CA20D76A05FD11F8
<tr>
<td>g_a</td>
<td>300, 260</td>
<td><code>FE000100AF72F3963FDBA1665B55447F</code> <code>D1D6E0085A7B44999E834CE16D600DA9</code> <code>7DD44E70D4AFE2C8BDD51B7B1CD921D5</code> <code>66A9D89CAE5CA7BF4C88DA694EAEC3EC</code> <code>A1A938FE626D3A1D2ED84D9404ABC37E</code> <code>D8629A638F8591F441A21F4BE3388FDE</code> <code>34B271C9692F2EBD1F3BAB1A6CE391A0</code> <code>401D3F0417FFF96609178D4CF3D3CE15</code> <code>64264DD6266719A559BB5E40A6B69955</code> <code>BBBE32F0CFB7BDAA0B3A52CD1A6A72B8</code> <code>7C9EE66495C1ACCCA3BDA8299229D004</code> <code>5D59F9795BD3B38FC7A54EE590200E95</code> <code>EE7C739EA80ADEE55649226009BC14D3</code> <code>6797613DC4220B126631A41371739FD6</code> <code>3F3FAE3E5219B9164E45EA8BFEBF57B2</code> <code>39655B1745D73065C05E7A3DD69F0331</code><br> <code>AFF4B59E</code></td>
<td><code>FE000100BBCC9D18A34899FB13B987A3</code> <code>CDCD838DCE934554B98753F095E890A9</code> <code>B2934D144F8E07531A5522636C85B594</code> <code>D1576A0C56C1C29C99421294238FE800</code> <code>6B59EC9EF5BE48DE208B3134FED54152</code> <code>56A61DB92FF630B341DFFB475CC3BAFA</code> <code>8C8578BDD5CD41C7EC15D05436BC6E30</code> <code>BBD00A76FC79CD743966153C8D0DC390</code> <code>83E4DF249B30F7E98261112410DFBC70</code> <code>C9699C1CD4233650D57BB91EE1BD3812</code> <code>94807DCA26DEE3EBF37ADD9E361E4DCA</code> <code>6CA35F539605116EF1D7412933E45651</code> <code>A1C2E9EF67BC393FB9E71036429D7B66</code> <code>528543DD657C300436C968DE7A033A1E</code> <code>550E22E825A3F7481AF4BBB7DADAF640</code> <code>EF265788813546C7F9898F2E8CDD45A6</code><br> <code>889FD163</code></td>
<td><code>g_a</code> diffie-hellman parameter</td>
</tr>
<tr>
<td>server_time</td>
<td>560, 4</td>
<td><code>B23FA166</code> (1721843634 in decimal)</td>
<td><code>7B43A166</code> (1721844603 in decimal)</td>
<td>Server time</td>
</tr>
</tbody>
@ -609,34 +609,34 @@ answer = BA0D89B550042280E4B67C3077D4A0C12D4D1EC1F2E4639D99B8105CA20D76A05FD11F8
<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 = 93831429A46135EDDDD7FA9F99A950A8F978D0A68E8D7B157E1E15BF5491C86C19F72A34ED3AD9D6E4135149055ACE071B83C077005A7E13DD657933D6F456BAD726BBF52A6245236DFB4C1C4E9B94286A2B8B7E597B890E3274939AD16CD51E9C42F574BCD2B1328CBE1B82E731ABCD8CDD751A74454F23461C0C7A5A939512B0BAC1D304D921ECDFCA0024D5232200E0BE5DB9EC5FCD7D0544BE0DC87C78585DA374636733153DFD9B795E59696EC94E5B5C3DDC26EA57FF31E0ADE45E274904EAC9749C8E4C5CEE0B8A4D568FE53798A7B12390B70FF3B5420FF8737B03D86AA79A318894BC57BA78AB65CC9EC4362290B3DE859A52A83485BE9F3CC59DE9</code></pre>
<pre><code>b = F3BD198E3CC3EFD50CD81617DEC349D6D1CED6F151A3CF2FDB8474C745B699024DFF87C750C1F1010337E7978602B9CF5A40886FA213B8CAD0DDDCEFFA24E5085CDBDC0B7AA83CD5EE3B4D556F17B0E8D75FA54ABDC2FC158B6A85E84EEA42BBA411805625F08922C83D3736B580B69003BDF7F25DE7216094305A4C384A1C98446D1572BE84ECB8A217DF614D6B7B32E473A1C2B8C8AF7DC957F7CA88D42BD3CDA313CC685434E3AEC33125C486983C799DAA1712AB9113539A555F932CF7ACF4C0F5FAD58EA6A2D4441738312EA3A021F0CCB49C79DD54BB9E4AA8938C33BA64016CFAE612641C4D9D080A08B15879CAA6DA8DCADFBF0EED807293433251A4</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 = A19FC9C0AB9D0660D1FC2A6FA650B68422641BE7BD061CC7D1F909B12DF949E884D2FCD2F97E777C6583577F57F488AA8CEBF3F05C38194F9B9D17874D33E6ED37A5CBE1E53693C99A03137344CD3BE2BF92090DB52AB1FDA3825E879353A78BF6BC1C890301518C1E4E86A5B183A0B3A7C6F99AC6AC57DC42DCA8CE3FD1CE726F07D68AF73D5845CC0FD7746D11037D8BE9AF2F6B0726FDA1CEB97F309653E97CD36F321DCD7829ED9C9BCD1799C8A19F39F721358AC0581CE7BFA95BE2BD840FA03888ED2A04745B2910E5289800A42B3A6569CE9EAD24E7ED51E44D4D1ACE7F2C121B228E584E26D698D613ECC0CCAEE72E9ACA01BF3901D94027327FD1C1</code></pre>
<pre><code>g_b = 9B35B0EE11899D4E05822A62AE8FBE66F760548CFB05D137B00A90B349D0FB053E66AB85CA80E7347960D6780CB79A2FEA109EACB12BCBE9C8D8D66DB20C4D40475ADBBCFEB1E5E8B346BA902EBE0AE9A00FB96337218A46E66CC5323AE8F88EE814707FA57887FF010FEE519704DE88056B5C3BDBF8D911DA07B2E9F615C41C495A47372AC3E8D5604D24B2C94737142CE8FA10765C7575CEA0136B3B2F17CC93B2CC5C46EB8C7416CAFFD346C9784B7A3B50EE2B064380087F3E86EBE9C2679DC1F4A238C9D27660FDE64C53798EC23BBB36F602441F37B2F370F1F3379D0FB57FCA43B9A58B4CA7022E658D0D93849543CAC46DDFB27D6DDED4174DDA97CB</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 50 04 22 80 E4 B6 7C 30 77 D4 A0 C1
0010 | 2D 4D 1E C1 F2 E4 63 9D 99 B8 10 5C A2 0D 76 A0
0020 | 5F D1 1F 84 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | A1 9F C9 C0 AB 9D 06 60 D1 FC 2A 6F A6 50 B6 84
0040 | 22 64 1B E7 BD 06 1C C7 D1 F9 09 B1 2D F9 49 E8
0050 | 84 D2 FC D2 F9 7E 77 7C 65 83 57 7F 57 F4 88 AA
0060 | 8C EB F3 F0 5C 38 19 4F 9B 9D 17 87 4D 33 E6 ED
0070 | 37 A5 CB E1 E5 36 93 C9 9A 03 13 73 44 CD 3B E2
0080 | BF 92 09 0D B5 2A B1 FD A3 82 5E 87 93 53 A7 8B
0090 | F6 BC 1C 89 03 01 51 8C 1E 4E 86 A5 B1 83 A0 B3
00A0 | A7 C6 F9 9A C6 AC 57 DC 42 DC A8 CE 3F D1 CE 72
00B0 | 6F 07 D6 8A F7 3D 58 45 CC 0F D7 74 6D 11 03 7D
00C0 | 8B E9 AF 2F 6B 07 26 FD A1 CE B9 7F 30 96 53 E9
00D0 | 7C D3 6F 32 1D CD 78 29 ED 9C 9B CD 17 99 C8 A1
00E0 | 9F 39 F7 21 35 8A C0 58 1C E7 BF A9 5B E2 BD 84
00F0 | 0F A0 38 88 ED 2A 04 74 5B 29 10 E5 28 98 00 A4
0100 | 2B 3A 65 69 CE 9E AD 24 E7 ED 51 E4 4D 4D 1A CE
0110 | 7F 2C 12 1B 22 8E 58 4E 26 D6 98 D6 13 EC C0 CC
0120 | AE E7 2E 9A CA 01 BF 39 01 D9 40 27 32 7F D1 C1</code></pre>
<pre><code>0000 | 54 B6 43 66 66 CD 10 76 62 1B 9E 73 E9 F5 D2 63
0010 | 5F 0C 1A 01 26 AF A9 7C 5F D7 7F F1 E0 39 D1 40
0020 | 00 ED 24 1D 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | 9B 35 B0 EE 11 89 9D 4E 05 82 2A 62 AE 8F BE 66
0040 | F7 60 54 8C FB 05 D1 37 B0 0A 90 B3 49 D0 FB 05
0050 | 3E 66 AB 85 CA 80 E7 34 79 60 D6 78 0C B7 9A 2F
0060 | EA 10 9E AC B1 2B CB E9 C8 D8 D6 6D B2 0C 4D 40
0070 | 47 5A DB BC FE B1 E5 E8 B3 46 BA 90 2E BE 0A E9
0080 | A0 0F B9 63 37 21 8A 46 E6 6C C5 32 3A E8 F8 8E
0090 | E8 14 70 7F A5 78 87 FF 01 0F EE 51 97 04 DE 88
00A0 | 05 6B 5C 3B DB F8 D9 11 DA 07 B2 E9 F6 15 C4 1C
00B0 | 49 5A 47 37 2A C3 E8 D5 60 4D 24 B2 C9 47 37 14
00C0 | 2C E8 FA 10 76 5C 75 75 CE A0 13 6B 3B 2F 17 CC
00D0 | 93 B2 CC 5C 46 EB 8C 74 16 CA FF D3 46 C9 78 4B
00E0 | 7A 3B 50 EE 2B 06 43 80 08 7F 3E 86 EB E9 C2 67
00F0 | 9D C1 F4 A2 38 C9 D2 76 60 FD E6 4C 53 79 8E C2
0100 | 3B BB 36 F6 02 44 1F 37 B2 F3 70 F1 F3 37 9D 0F
0110 | B5 7F CA 43 B9 A5 8B 4C A7 02 2E 65 8D 0D 93 84
0120 | 95 43 CA C4 6D DF B2 7D 6D DE D4 17 4D DA 97 CB</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 = BA0D89B550042280E4B67C3077D4A0C12D4D1EC1F2E4639D99B8105CA20D76A05FD11F8
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>50042280E4B67C3077D4A0C12D4D1EC1</code></td>
<td><code>66CD1076621B9E73E9F5D2635F0C1A01</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>F2E4639D99B8105CA20D76A05FD11F84</code></td>
<td><code>26AFA97C5FD77FF1E039D14000ED241D</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>g_b</td>
<td>36, 260</td>
<td><code>FE000100A19FC9C0AB9D0660D1FC2A6F</code> <code>A650B68422641BE7BD061CC7D1F909B1</code> <code>2DF949E884D2FCD2F97E777C6583577F</code> <code>57F488AA8CEBF3F05C38194F9B9D1787</code> <code>4D33E6ED37A5CBE1E53693C99A031373</code> <code>44CD3BE2BF92090DB52AB1FDA3825E87</code> <code>9353A78BF6BC1C890301518C1E4E86A5</code> <code>B183A0B3A7C6F99AC6AC57DC42DCA8CE</code> <code>3FD1CE726F07D68AF73D5845CC0FD774</code> <code>6D11037D8BE9AF2F6B0726FDA1CEB97F</code> <code>309653E97CD36F321DCD7829ED9C9BCD</code> <code>1799C8A19F39F721358AC0581CE7BFA9</code> <code>5BE2BD840FA03888ED2A04745B2910E5</code> <code>289800A42B3A6569CE9EAD24E7ED51E4</code> <code>4D4D1ACE7F2C121B228E584E26D698D6</code> <code>13ECC0CCAEE72E9ACA01BF3901D94027</code><br> <code>327FD1C1</code></td>
<td><code>FE0001009B35B0EE11899D4E05822A62</code> <code>AE8FBE66F760548CFB05D137B00A90B3</code> <code>49D0FB053E66AB85CA80E7347960D678</code> <code>0CB79A2FEA109EACB12BCBE9C8D8D66D</code> <code>B20C4D40475ADBBCFEB1E5E8B346BA90</code> <code>2EBE0AE9A00FB96337218A46E66CC532</code> <code>3AE8F88EE814707FA57887FF010FEE51</code> <code>9704DE88056B5C3BDBF8D911DA07B2E9</code> <code>F615C41C495A47372AC3E8D5604D24B2</code> <code>C94737142CE8FA10765C7575CEA0136B</code> <code>3B2F17CC93B2CC5C46EB8C7416CAFFD3</code> <code>46C9784B7A3B50EE2B064380087F3E86</code> <code>EBE9C2679DC1F4A238C9D27660FDE64C</code> <code>53798EC23BBB36F602441F37B2F370F1</code> <code>F3379D0FB57FCA43B9A58B4CA7022E65</code> <code>8D0D93849543CAC46DDFB27D6DDED417</code><br> <code>4DDA97CB</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 = BA0D89B550042280E4B67C3077D4A0C12D4D1EC1F2E4639D99B8105CA20D76A05FD11F8
<!-- 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 = 54B6436650042280E4B67C3077D4A0C12D4D1EC1F2E4639D99B8105CA20D76A05FD11F840000000000000000FE000100A19FC9C0AB9D0660D1FC2A6FA650B68422641BE7BD061CC7D1F909B12DF949E884D2FCD2F97E777C6583577F57F488AA8CEBF3F05C38194F9B9D17874D33E6ED37A5CBE1E53693C99A03137344CD3BE2BF92090DB52AB1FDA3825E879353A78BF6BC1C890301518C1E4E86A5B183A0B3A7C6F99AC6AC57DC42DCA8CE3FD1CE726F07D68AF73D5845CC0FD7746D11037D8BE9AF2F6B0726FDA1CEB97F309653E97CD36F321DCD7829ED9C9BCD1799C8A19F39F721358AC0581CE7BFA95BE2BD840FA03888ED2A04745B2910E5289800A42B3A6569CE9EAD24E7ED51E44D4D1ACE7F2C121B228E584E26D698D613ECC0CCAEE72E9ACA01BF3901D94027327FD1C1
padding = B08362F89D08E0945C49D4B6
tmp_aes_key = 0862009CDA343B604C16E1FB67162F4A6E0328779435AE8B32B844D8B8AE1B27
tmp_aes_iv = D322BF7B0FE3405722AE697F94816E143A5EB539D3129610D71EA71C3C0C1014</code></pre>
<pre><code>data = 54B6436666CD1076621B9E73E9F5D2635F0C1A0126AFA97C5FD77FF1E039D14000ED241D0000000000000000FE0001009B35B0EE11899D4E05822A62AE8FBE66F760548CFB05D137B00A90B349D0FB053E66AB85CA80E7347960D6780CB79A2FEA109EACB12BCBE9C8D8D66DB20C4D40475ADBBCFEB1E5E8B346BA902EBE0AE9A00FB96337218A46E66CC5323AE8F88EE814707FA57887FF010FEE519704DE88056B5C3BDBF8D911DA07B2E9F615C41C495A47372AC3E8D5604D24B2C94737142CE8FA10765C7575CEA0136B3B2F17CC93B2CC5C46EB8C7416CAFFD346C9784B7A3B50EE2B064380087F3E86EBE9C2679DC1F4A238C9D27660FDE64C53798EC23BBB36F602441F37B2F370F1F3379D0FB57FCA43B9A58B4CA7022E658D0D93849543CAC46DDFB27D6DDED4174DDA97CB
padding = B646261505D593BCB4C1D796
tmp_aes_key = 9C9BB7C3AA015DBE62FE5577D0C089EF7C0A6EE4350CAC3BEE267C92AF846BBF
tmp_aes_iv = E8F23793463529F1EBDB9B64830F0D3FDD9F5AD447CBBFF257E7385F9A879B42</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 = 65DD9E82DAF5DC0BAE54B8E1A723406231C580667F99E9518EC40A39E8802005E98ADAC58E1C35E5B7BE7032B707818307FD5518D88BEC9AC84C57CA24813180AE0DDF16BE8AD5F03FB71E3C7958F5FA65995BAFF21375B309E52870BBE1C4D530B60983C584D3E1F6D91342CB6B22BB843B97825C9FFD0482F19055202254B1A8E5DBC1B7A40CC673845423358537D363B70F56466B3BC197FBCC15A336688F64FFE8072D8FF7BA9F1CEDC9E7A3EE4680522A9DE52B154D9528C2CE14A68ED1353E4657A386F758FE85A341A37C4A7451B1B1539D47CD846CC401B190E81F9D593D377E8B5313DF39A55230D69C983475231133456F645C69963F2C9E0EFC214577A3DFA62A2BF28E81439030A094627F3CC56127B6661EEE5247AE5D2FCA3BE86B07A43B434F8A474DBB5A0B66CDEE80AE6406A7D0E791A9F37AE5F9459C07D429C601A1352485D6AC5369F6AD623A</code></pre>
<pre><code>encrypted_data = C533E5FB208024045491BC78D56FDCA13C02E9C40463BC90AB7A97D62D44445686762FCB33E2E286AB1A9186B0CDD436892E970DCE565F34D8EAAEB72E11B615E4ED0C6871577AE4ED5A8AB10BE7BCB31CA00E9902CF33DC26D9571B02AC2D2E8827BEE24CE00513CC95BD39B8B705597A05CDEBBEFD4FBABA1EB72B6DC628ACB7B0CBCD9DDD511E98B93C7671E74B7F3667A04DAF15D4C613A64E4F5870E1CF5027D199C4D95394A3A7E7AFD371CE9045E0DAF48C1C48AEC248A51363C6401CCE30EA0B2A5EB41F5112FCBC58AB40369BF0153A880D54B1634114E47FCCD12C76486F9621C98B2B963CE0CA37E23A0017DC61E8778F544A8167C8DE3A1067EFC53B064D0578F2D3D867B562D027FBE20E08D4AD3232922A95E9C2BFF803F7E80B814969297B1D380084DD21C39C7B78A497CEFA2E9F167595DB499B6661B0AC0E339CB57F9F7ED64433A7806FAB7B29</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 34 5A 00 00 B2 3F A1 66
0010 | 78 01 00 00 1F 5F 04 F5 50 04 22 80 E4 B6 7C 30
0020 | 77 D4 A0 C1 2D 4D 1E C1 F2 E4 63 9D 99 B8 10 5C
0030 | A2 0D 76 A0 5F D1 1F 84 FE 50 01 00 65 DD 9E 82
0040 | DA F5 DC 0B AE 54 B8 E1 A7 23 40 62 31 C5 80 66
0050 | 7F 99 E9 51 8E C4 0A 39 E8 80 20 05 E9 8A DA C5
0060 | 8E 1C 35 E5 B7 BE 70 32 B7 07 81 83 07 FD 55 18
0070 | D8 8B EC 9A C8 4C 57 CA 24 81 31 80 AE 0D DF 16
0080 | BE 8A D5 F0 3F B7 1E 3C 79 58 F5 FA 65 99 5B AF
0090 | F2 13 75 B3 09 E5 28 70 BB E1 C4 D5 30 B6 09 83
00A0 | C5 84 D3 E1 F6 D9 13 42 CB 6B 22 BB 84 3B 97 82
00B0 | 5C 9F FD 04 82 F1 90 55 20 22 54 B1 A8 E5 DB C1
00C0 | B7 A4 0C C6 73 84 54 23 35 85 37 D3 63 B7 0F 56
00D0 | 46 6B 3B C1 97 FB CC 15 A3 36 68 8F 64 FF E8 07
00E0 | 2D 8F F7 BA 9F 1C ED C9 E7 A3 EE 46 80 52 2A 9D
00F0 | E5 2B 15 4D 95 28 C2 CE 14 A6 8E D1 35 3E 46 57
0100 | A3 86 F7 58 FE 85 A3 41 A3 7C 4A 74 51 B1 B1 53
0110 | 9D 47 CD 84 6C C4 01 B1 90 E8 1F 9D 59 3D 37 7E
0120 | 8B 53 13 DF 39 A5 52 30 D6 9C 98 34 75 23 11 33
0130 | 45 6F 64 5C 69 96 3F 2C 9E 0E FC 21 45 77 A3 DF
0140 | A6 2A 2B F2 8E 81 43 90 30 A0 94 62 7F 3C C5 61
0150 | 27 B6 66 1E EE 52 47 AE 5D 2F CA 3B E8 6B 07 A4
0160 | 3B 43 4F 8A 47 4D BB 5A 0B 66 CD EE 80 AE 64 06
0170 | A7 D0 E7 91 A9 F3 7A E5 F9 45 9C 07 D4 29 C6 01
0180 | A1 35 24 85 D6 AC 53 69 F6 AD 62 3A</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 80 14 01 00 7C 43 A1 66
0010 | 78 01 00 00 1F 5F 04 F5 66 CD 10 76 62 1B 9E 73
0020 | E9 F5 D2 63 5F 0C 1A 01 26 AF A9 7C 5F D7 7F F1
0030 | E0 39 D1 40 00 ED 24 1D FE 50 01 00 C5 33 E5 FB
0040 | 20 80 24 04 54 91 BC 78 D5 6F DC A1 3C 02 E9 C4
0050 | 04 63 BC 90 AB 7A 97 D6 2D 44 44 56 86 76 2F CB
0060 | 33 E2 E2 86 AB 1A 91 86 B0 CD D4 36 89 2E 97 0D
0070 | CE 56 5F 34 D8 EA AE B7 2E 11 B6 15 E4 ED 0C 68
0080 | 71 57 7A E4 ED 5A 8A B1 0B E7 BC B3 1C A0 0E 99
0090 | 02 CF 33 DC 26 D9 57 1B 02 AC 2D 2E 88 27 BE E2
00A0 | 4C E0 05 13 CC 95 BD 39 B8 B7 05 59 7A 05 CD EB
00B0 | BE FD 4F BA BA 1E B7 2B 6D C6 28 AC B7 B0 CB CD
00C0 | 9D DD 51 1E 98 B9 3C 76 71 E7 4B 7F 36 67 A0 4D
00D0 | AF 15 D4 C6 13 A6 4E 4F 58 70 E1 CF 50 27 D1 99
00E0 | C4 D9 53 94 A3 A7 E7 AF D3 71 CE 90 45 E0 DA F4
00F0 | 8C 1C 48 AE C2 48 A5 13 63 C6 40 1C CE 30 EA 0B
0100 | 2A 5E B4 1F 51 12 FC BC 58 AB 40 36 9B F0 15 3A
0110 | 88 0D 54 B1 63 41 14 E4 7F CC D1 2C 76 48 6F 96
0120 | 21 C9 8B 2B 96 3C E0 CA 37 E2 3A 00 17 DC 61 E8
0130 | 77 8F 54 4A 81 67 C8 DE 3A 10 67 EF C5 3B 06 4D
0140 | 05 78 F2 D3 D8 67 B5 62 D0 27 FB E2 0E 08 D4 AD
0150 | 32 32 92 2A 95 E9 C2 BF F8 03 F7 E8 0B 81 49 69
0160 | 29 7B 1D 38 00 84 DD 21 C3 9C 7B 78 A4 97 CE FA
0170 | 2E 9F 16 75 95 DB 49 9B 66 61 B0 AC 0E 33 9C B5
0180 | 7F 9F 7E D6 44 33 A7 80 6F AB 7B 29</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>345A0000B23FA166</code></td>
<td><code>801401007C43A166</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>50042280E4B67C3077D4A0C12D4D1EC1</code></td>
<td><code>66CD1076621B9E73E9F5D2635F0C1A01</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>F2E4639D99B8105CA20D76A05FD11F84</code></td>
<td><code>26AFA97C5FD77FF1E039D14000ED241D</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_data</td>
<td>56, 340</td>
<td><code>FE50010065DD9E82DAF5DC0BAE54B8E1</code> <code>A723406231C580667F99E9518EC40A39</code> <code>E8802005E98ADAC58E1C35E5B7BE7032</code> <code>B707818307FD5518D88BEC9AC84C57CA</code> <code>24813180AE0DDF16BE8AD5F03FB71E3C</code> <code>7958F5FA65995BAFF21375B309E52870</code> <code>BBE1C4D530B60983C584D3E1F6D91342</code> <code>CB6B22BB843B97825C9FFD0482F19055</code> <code>202254B1A8E5DBC1B7A40CC673845423</code> <code>358537D363B70F56466B3BC197FBCC15</code> <code>A336688F64FFE8072D8FF7BA9F1CEDC9</code> <code>E7A3EE4680522A9DE52B154D9528C2CE</code> <code>14A68ED1353E4657A386F758FE85A341</code> <code>A37C4A7451B1B1539D47CD846CC401B1</code> <code>90E81F9D593D377E8B5313DF39A55230</code> <code>D69C983475231133456F645C69963F2C</code> <code>9E0EFC214577A3DFA62A2BF28E814390</code> <code>30A094627F3CC56127B6661EEE5247AE</code> <code>5D2FCA3BE86B07A43B434F8A474DBB5A</code> <code>0B66CDEE80AE6406A7D0E791A9F37AE5</code> <code>F9459C07D429C601A1352485D6AC5369</code><br> <code>F6AD623A</code></td>
<td><code>FE500100C533E5FB208024045491BC78</code> <code>D56FDCA13C02E9C40463BC90AB7A97D6</code> <code>2D44445686762FCB33E2E286AB1A9186</code> <code>B0CDD436892E970DCE565F34D8EAAEB7</code> <code>2E11B615E4ED0C6871577AE4ED5A8AB1</code> <code>0BE7BCB31CA00E9902CF33DC26D9571B</code> <code>02AC2D2E8827BEE24CE00513CC95BD39</code> <code>B8B705597A05CDEBBEFD4FBABA1EB72B</code> <code>6DC628ACB7B0CBCD9DDD511E98B93C76</code> <code>71E74B7F3667A04DAF15D4C613A64E4F</code> <code>5870E1CF5027D199C4D95394A3A7E7AF</code> <code>D371CE9045E0DAF48C1C48AEC248A513</code> <code>63C6401CCE30EA0B2A5EB41F5112FCBC</code> <code>58AB40369BF0153A880D54B1634114E4</code> <code>7FCCD12C76486F9621C98B2B963CE0CA</code> <code>37E23A0017DC61E8778F544A8167C8DE</code> <code>3A1067EFC53B064D0578F2D3D867B562</code> <code>D027FBE20E08D4AD3232922A95E9C2BF</code> <code>F803F7E80B814969297B1D380084DD21</code> <code>C39C7B78A497CEFA2E9F167595DB499B</code> <code>6661B0AC0E339CB57F9F7ED64433A780</code><br> <code>6FAB7B29</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 = 7E5156146BF2D2DDE7418F5C735C5F082962E97EF2B9B04670CD5FB3D7A94251D285D0076530C55AE95E214271371E4DB14A1CD9139C0C06E3E094C089C536C4E09CF0FDA412F6E8EA118AF0500CC2F52E1999EB80286E3A0E96E975D02DEA483171812CE30E33DF2FB30B684F4338C80BBB8EC73373CCE122DF4EEC43487720D6606C4825D17FB08EB103056D65AB77177C2B182714082187325AC1ABEA620C2FEF4F8E33B43DDF9A826C0E58657DEFC195461CA906600C66102E2F61C773E92D00FA00C37FA9A424467006BEA612364A046F40B64681677C1E1C144B8D7C60255747A1E99284D98ACDAC8DD05470AEB777E371288A5E7285AB82CB39F736A5</code></pre>
<pre><code>auth_key = 4276EF1032C70A4E35670EAF0E50151FFD3EC40D76DDFB6F1E034ABDAB81639D82E7E7CF136998ED3BEE8043BFD2B9E4D6BCCBD454C8B1981A215ADA694516C6E63F033D3243FC8309FA37441C1BC7FE9F478B463A99ADB3A9AD3A05C31946E23641A2EFD932AA92B3FA945381F4CD242FCBF7B5405C01B770D116531F94282DBA1B8D084326527D7CA31D38A3E8609CB9E5E2550C34C5FF1B48F007C9548CEF02786EA179FA31C30EF2487116C5EF267994F77E79D851E5A0D73A50AC6A706D19B941A6630EA092A4EB238EA3255CBCF02B32DE812DD69C93B49DD1EEE0DED53FC31698CA918BB51099E1FD514657228CC46FDAF446EBFC428CAE931B6725ED</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 24 35 2E B3 3F A1 66
0010 | 34 00 00 00 34 F7 CB 3B 50 04 22 80 E4 B6 7C 30
0020 | 77 D4 A0 C1 2D 4D 1E C1 F2 E4 63 9D 99 B8 10 5C
0030 | A2 0D 76 A0 5F D1 1F 84 02 19 CE AD 56 AF EB A2
0040 | C0 3B 7C 92 B3 63 97 D0</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 90 46 C9 7C 43 A1 66
0010 | 3C 00 00 00 34 F7 CB 3B 66 CD 10 76 62 1B 9E 73
0020 | E9 F5 D2 63 5F 0C 1A 01 26 AF A9 7C 5F D7 7F F1
0030 | E0 39 D1 40 00 ED 24 1D 68 01 01 49 64 44 91 E7
0040 | 76 C7 E3 8A 54 E3 33 F9</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>0124352EB33FA166</code></td>
<td><code>019046C97C43A166</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>34000000</code> (52 in decimal)</td>
<td><code>3C000000</code> (60 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>50042280E4B67C3077D4A0C12D4D1EC1</code></td>
<td><code>66CD1076621B9E73E9F5D2635F0C1A01</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>F2E4639D99B8105CA20D76A05FD11F84</code></td>
<td><code>26AFA97C5FD77FF1E039D14000ED241D</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce_hash1</td>
<td>56, 16</td>
<td><code>0219CEAD56AFEBA2C03B7C92B36397D0</code></td>
<td><code>68010149644491E776C7E38A54E333F9</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

@ -78,7 +78,7 @@
<tbody>
<tr>
<td><a href="/constructor/inputPrivacyKeyStatusTimestamp">inputPrivacyKeyStatusTimestamp</a></td>
<td>Whether people will be able to see our exact last online timestamp.<br><br>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.</td>
<td>Whether people will be able to see our exact last online timestamp.<br><br>Note that if <em>we</em> decide to hide our exact last online timestamp to someone (i.e., users A, B, C, or all users) <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 those users (A, B, C, or all users), even if those users <em>do</em> share it with us.<br><br>If those users <em>do</em> share their exact online status with us, but we can't see it due to the reason mentioned above, the <code>by_me</code> flag of <a href="/constructor/userStatusRecently">userStatusRecently</a>, <a href="/constructor/userStatusLastWeek">userStatusLastWeek</a>, <a href="/constructor/userStatusLastMonth">userStatusLastMonth</a> will be set.</td>
</tr>
<tr>
<td><a href="/constructor/inputPrivacyKeyChatInvite">inputPrivacyKeyChatInvite</a></td>

View file

@ -78,7 +78,7 @@
<tbody>
<tr>
<td><a href="/constructor/privacyKeyStatusTimestamp">privacyKeyStatusTimestamp</a></td>
<td>Whether we can see the last online timestamp of this user.<br><br>Note that if <em>we</em> decide to hide our exact last online timestamp to someone (i.e., users A, B, C, or all users) <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 those users (A, B, C, or all users), even if those users <em>do</em> share it with us.<br><br>If those users <em>do</em> share their exact online status with us, but we can't see it due to the reason mentioned above, the <code>by_me</code> flag of <a href="/constructor/userStatusRecently">userStatusRecently</a>, <a href="/constructor/userStatusLastWeek">userStatusLastWeek</a>, <a href="/constructor/userStatusLastMonth">userStatusLastMonth</a>.</td>
<td>Whether we can see the last online timestamp of this user.<br><br>Note that if <em>we</em> decide to hide our exact last online timestamp to someone (i.e., users A, B, C, or all users) <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 those users (A, B, C, or all users), even if those users <em>do</em> share it with us.<br><br>If those users <em>do</em> share their exact online status with us, but we can't see it due to the reason mentioned above, the <code>by_me</code> flag of <a href="/constructor/userStatusRecently">userStatusRecently</a>, <a href="/constructor/userStatusLastWeek">userStatusLastWeek</a>, <a href="/constructor/userStatusLastMonth">userStatusLastMonth</a> will be set.</td>
</tr>
<tr>
<td><a href="/constructor/privacyKeyChatInvite">privacyKeyChatInvite</a></td>