Update content of files

This commit is contained in:
GitHub Action 2024-08-01 18:30:51 +00:00
parent c9dfe92ba0
commit 9ad0e5f1a1
6 changed files with 317 additions and 225 deletions

View file

@ -46,6 +46,34 @@
<p>Below you will find information on schema changes. For more details on the use of layers, see <a href="/api/invoking#layers">Invoking API methods</a>.</p>
<h3><a class="anchor" href="#layer-181" id="layer-181" name="layer-181"><i class="anchor-icon"></i></a><a href="/schema?layer=181">Layer 181</a></h3>
<p>Start reading the changelog at <a href="#layer-171">layer 171</a> to view all changes since the last refresh of the documentation.</p>
<p>The following detailed articles about <em>pre-existing</em> features were added:</p>
<ul>
<li><a href="/api/bots/ids">Bot API dialog IDs »</a></li>
<li><a href="/api/peers">Peer database »</a></li>
<li><a href="/api/gifs">Working with GIFs »</a></li>
<li><a href="/api/emoji-categories">Emoji categories »</a></li>
<li><a href="/api/profile">Profile page »</a></li>
<li><a href="/api/stickers#premium-animated-sticker-effects">Premium animated sticker effects »</a></li>
<li><a href="/api/stickers#special-stickers">Special stickers »</a></li>
<li><a href="/api/search#global-search">Global search »</a></li>
<li><a href="/api/srp#using-the-2fa-password">Using the 2FA password »</a></li>
<li>Added more details about the <a href="/api/push-updates#possible-notifications">READ_REACTION »</a>, <a href="/api/push-updates#possible-notifications">READ_STORIES »</a>, <a href="/api/push-updates#possible-notifications">STORY_DELETED »</a> push notifications.</li>
</ul>
<p>The following new features were added:</p>
<ul>
<li>Allow <a href="/api/bots/webapps">Mini Apps</a> to specify a browser to use when opening a link using <a href="/api/web-events#web-app-invoke-custom-method">web_app_invoke_custom_method.try_browser »</a>.</li>
<li>Added the <a href="/api/bots/webapps#theme-parameters"><code>section_separator_color</code> Mini Apps theme key »</a></li>
</ul>
<p>The following new <a href="/api/config#client-configuration">client configuration keys »</a> were added:</p>
<ul>
<li><a href="/api/config#web-app-allowed-protocols">web_app_allowed_protocols »</a></li>
</ul>
<p>The following new <a href="/api/config#suggestions">suggestions »</a> were added:</p>
<ul>
<li><code>"PREMIUM_CHRISTMAS"</code> - Suggests the user to <a href="/api/premium#gifting-telegram-premium">gift Telegram Premium</a> subscription to friends for Christmas.</li>
<li><code>"PREMIUM_GRACE"</code> - Suggests the user to extend their expiring Telegram Premium subscription</li>
</ul>
<p>This layer introduces <a href="/api/factcheck">fact-checks »</a>, <a href="/api/stars">Telegram Stars</a> and <a href="/constructor/messageEntityBlockquote">collapsible message quotes »</a>.</p>
<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>
@ -113,6 +141,10 @@
<a href="/method/payments.refundStarsCharge">payments.refundStarsCharge</a>#25ae8f4a user_id:<a href="/type/InputUser">InputUser</a> charge_id:<a href="/type/string">string</a> = <a href="/type/Updates">Updates</a>;<br></code></pre></div>
<h3><a class="anchor" href="#layer-180" id="layer-180" name="layer-180"><i class="anchor-icon"></i></a><a href="/schema?layer=180">Layer 180</a></h3>
<p>This layer introduces <a href="/api/effects">animated message effects »</a>, <a href="/method/channels.searchPosts">global hashtag search in all public channels (including those we aren't a member of) »</a>, <a href="/constructor/updateBroadcastRevenueTransactions">channel ad revenue transaction updates »</a> and improvements to device integrity verification for official apps.</p>
<p>The following new <a href="/api/premium#telegram-premium-features">Telegram Premium feature indentifiers »</a> were added:</p>
<ul>
<li><code>effects</code></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>
@ -274,27 +306,72 @@
<h3><a class="anchor" href="#layer-177" id="layer-177" name="layer-177"><i class="anchor-icon"></i></a><a href="/schema?layer=177">Layer 177</a></h3>
<p>This layer adds the following features:</p>
<ul>
<li><a href="/api/revenue">Channel ad revenue »</a>: Telegram channel owners can now receive 50% of the revenue from ads displayed in their channels, as well as view detailed revenue statistics.</li>
<li><a href="/api/business#connected-bots">Telegram Business connected bots »</a>: <a href="/api/action-bar#manage-a-connected-business-bot">connected business bot action bar »</a> and bot-side constructors.</li>
<li><a href="/api/business#business-introduction">Telegram Business introduction »</a></li>
<li><a href="/api/business#business-chat-links">Telegram Business chat links »</a></li>
<li><a href="/api/fragment">Fetch info about Fragment collectibles »</a></li>
<li><a href="/api/profile#birthday">Birthdays »</a></li>
<li><a href="/api/profile#personal-channel">Linked personal channels »</a></li>
<li><a href="/api/sponsored-messages#reporting-sponsored-messages">Report ads »</a></li>
<li><a href="/method/channels.restrictSponsoredMessages">Disable ads on boosted channels you own »</a></li>
<li><a href="/method/stickers.replaceSticker">Replace single stickers in stickersets »</a></li>
<li>A refactored and improved <a href="/api/invites#direct-invites">channel/supergroup/group invitation flow »</a></li>
<li>Users can now directly edit created <a href="/api/stickers">stickersets »</a>, including custom emoji stickersets, without using the now <strong>deprecated</strong> <a href="https://t.me/stickers">@stickers</a> bot.<br>
<li>
<p><a href="/api/revenue">Channel ad revenue »</a>: Telegram channel owners can now receive 50% of the revenue from ads displayed in their channels, as well as view detailed revenue statistics.</p>
</li>
<li>
<p><a href="/api/business#connected-bots">Telegram Business connected bots »</a>: <a href="/api/action-bar#manage-a-connected-business-bot">connected business bot action bar »</a> and bot-side constructors.</p>
</li>
<li>
<p><a href="/api/business#business-introduction">Telegram Business introduction »</a></p>
</li>
<li>
<p><a href="/api/business#business-chat-links">Telegram Business chat links »</a></p>
</li>
<li>
<p><a href="/api/fragment">Fetch info about Fragment collectibles »</a></p>
</li>
<li>
<p><a href="/api/profile#birthday">Birthdays »</a></p>
</li>
<li>
<p><a href="/api/profile#personal-channel">Linked personal channels »</a></p>
</li>
<li>
<p><a href="/api/sponsored-messages#reporting-sponsored-messages">Report ads »</a></p>
</li>
<li>
<p><a href="/method/channels.restrictSponsoredMessages">Disable ads on boosted channels you own »</a></p>
</li>
<li>
<p><a href="/method/stickers.replaceSticker">Replace single stickers in stickersets »</a></p>
</li>
<li>
<p>A refactored and improved <a href="/api/invites#direct-invites">channel/supergroup/group invitation flow »</a></p>
</li>
<li>
<p>Users can now directly edit created <a href="/api/stickers">stickersets »</a>, including custom emoji stickersets, without using the now <strong>deprecated</strong> <a href="https://t.me/stickers">@stickers</a> bot.<br>
Users and bots can now <a href="/method/messages.getMyStickers">fetch all stickersets owned by the current account »</a>; the new <a href="/constructor/stickerSet">stickerSet</a>.<code>creator</code> flag can also be used to distinguish stickersets created by the current account.<br>
Also, a single stickerset can now contain a mix of <a href="/api/stickers#static-stickers">static</a>, <a href="/api/stickers#animated-stickers">animated</a> and <a href="/api/stickers#video-stickers">video</a> stickers, removing the previously present distinction of static/animated/video stickersets (this distinction is still present in the <strong>deprecated</strong> <a href="https://t.me/stickers">@stickers</a> bot, so please only use the in-app sticker editor from now on).</li>
<li>Improvements for <a href="/constructor/keyboardButtonRequestPeer">keyboardButtonRequestPeer</a>.<br>
Also, a single stickerset can now contain a mix of <a href="/api/stickers#static-stickers">static</a>, <a href="/api/stickers#animated-stickers">animated</a> and <a href="/api/stickers#video-stickers">video</a> stickers, removing the previously present distinction of static/animated/video stickersets (this distinction is still present in the <strong>deprecated</strong> <a href="https://t.me/stickers">@stickers</a> bot, so please only use the in-app sticker editor from now on).</p>
</li>
<li>
<p>Improvements for <a href="/constructor/keyboardButtonRequestPeer">keyboardButtonRequestPeer</a>.<br>
Now bots will also receive the selected peer's name, username, photo (if present and requested by the new bot-side <a href="/constructor/inputKeyboardButtonRequestPeer">inputKeyboardButtonRequestPeer</a> button).<br>
Previously, just the peer's ID was sent, which could only be used to fetch the name/photo if the bot had already previously cached the peer's <a href="/api/peers#access-hash">access hash »</a>. <ul>
Previously, just the peer's ID was sent, which could only be used to fetch the name/photo if the bot had already previously cached the peer's <a href="/api/peers#access-hash">access hash »</a>.</p>
<ul>
<li>Bots will now receive the requested info as a <a href="/constructor/messageActionRequestedPeerSentMe">messageActionRequestedPeerSentMe</a> constructor instead of the old <a href="/constructor/messageActionRequestedPeer">messageActionRequestedPeer</a> constructor, which will only be received by users that shared the info.</li>
<li>Bots must now use <a href="/constructor/inputKeyboardButtonRequestPeer">inputKeyboardButtonRequestPeer</a> to send <a href="/constructor/keyboardButtonRequestPeer">keyboardButtonRequestPeer</a> buttons.</li>
</ul>
</li>
<li>
<p><a href="/api/bots/webapps">Mini Apps on Telegram »</a> now support biometric authentication, using the following new incoming web events:</p>
<ul>
<li><a href="/api/web-events#web-app-biometry-get-info">web_app_biometry_get_info »</a></li>
<li><a href="/api/web-events#web-app-biometry-request-access">web_app_biometry_request_access »</a></li>
<li><a href="/api/web-events#web-app-biometry-update-token">web_app_biometry_update_token »</a></li>
<li><a href="/api/web-events#web-app-biometry-request-auth">web_app_biometry_request_auth »</a></li>
<li><a href="/api/web-events#web-app-biometry-open-settings">web_app_biometry_open_settings »</a></li>
</ul>
<p>And the following new outgoing web events:</p>
<ul>
<li><a href="/api/bots/webapps#biometry-info-received">biometry_info_received »</a></li>
<li><a href="/api/bots/webapps#biometry-token-updated">biometry_token_updated »</a></li>
<li><a href="/api/bots/webapps#biometry-auth-requested">biometry_auth_requested »</a></li>
</ul>
</li>
<li>
<p>Non-<a href="/api/premium">Premium</a> users can now receive <code>FLOOD_PREMIUM_WAIT_%d</code> errors when uploading and downloading files, which should be handled as specified <a href="/api/files#uploading-files">here »</a> and <a href="/api/files#downloading-files">here »</a>.</p>
</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>
@ -481,6 +558,11 @@ Previously, just the peer's ID was sent, which could only be used to fetch the n
<li><a href="/api/business#away-messages">Telegram Business away messages »</a></li>
<li><a href="/api/business#connected-bots">Telegram Business connected bots »</a> (user-side constructors)</li>
<li><a href="/api/business#folder-tags">Telegram Business folder tags »</a></li>
<li><a href="/api/business#business-features-promo-page">Telegram Business promo page »</a></li>
</ul>
<p>The following new <a href="/api/premium#telegram-premium-features">Telegram Premium feature indentifiers »</a> were added:</p>
<ul>
<li><code>business</code></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>
@ -626,6 +708,7 @@ Previously, just the peer's ID was sent, which could only be used to fetch the n
<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#unlimited-voice-message-transcriptions-for-supergroups">Boost for unlimited voice message transcriptions for supergroups »</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>
@ -633,6 +716,11 @@ Previously, just the peer's ID was sent, which could only be used to fetch the n
<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>
<p>The following new <a href="/api/premium#telegram-premium-features">Telegram Premium feature indentifiers »</a> were added:</p>
<ul>
<li><code>last_seen</code></li>
<li><code>message_privacy</code></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>
@ -692,6 +780,10 @@ Previously, just the peer's ID was sent, which could only be used to fetch the n
<a href="/method/channels.setEmojiStickers">channels.setEmojiStickers</a>#3cd930b7 channel:<a href="/type/InputChannel">InputChannel</a> stickerset:<a href="/type/InputStickerSet">InputStickerSet</a> = <a href="/type/Bool">Bool</a>;<br></code></pre></div>
<h3><a class="anchor" href="#layer-171" id="layer-171" name="layer-171"><i class="anchor-icon"></i></a><a href="/schema?layer=171">Layer 171</a></h3>
<p>This layer introduces <a href="/api/saved-messages#tags">saved message tags »</a> and adds support for the "Channels" tab in the <a href="/api/search#global-search">global search view »</a>.</p>
<p>The following new <a href="/api/premium#telegram-premium-features">Telegram Premium feature indentifiers »</a> were added:</p>
<ul>
<li><code>saved_tags</code></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>

View file

@ -1488,7 +1488,7 @@ tg://resolve?domain=&lt;bot_username&gt;&amp;startattach=&lt;start_parameter&gt;
<li><code>help.getDeepLinkInfo({path: "need_update_for_some_feature"})</code></li>
<li><code>help.getDeepLinkInfo({path: "some_unsupported_feature"})</code></li>
</ul>
<p>Note that this method should not be called for unrecognized <code>t.me</code> links, the usual HTTP link handling logic should be used, instead.</p></div>
<p>Note that this method should not be called for unrecognized <code>t.me</code> links, the usual HTTP link handling logic must be used, instead.</p></div>
</div>

View file

@ -210,7 +210,7 @@ Then, when the user clicks on the subscribe button in the sent invoice, follow t
</ul>
<p>There is also a store-based subscription flow based on <a href="/method/payments.assignAppStoreTransaction">payments.assignAppStoreTransaction</a>/<a href="/method/payments.assignPlayMarketTransaction">payments.assignPlayMarketTransaction</a>, but it's currently not available to third-party apps (unlike the flow described above, which can be used by all clients).</p>
<h3><a class="anchor" href="#gifting-telegram-premium" id="gifting-telegram-premium" name="gifting-telegram-premium"><i class="anchor-icon"></i></a>Gifting Telegram Premium</h3>
<p>Note: to gift a Premium subscriptions to multiple friends, the alternative payment flow <a href="/api/giveaways">described here »</a> (<a href="/constructor/inputStorePaymentPremiumGiftCode">inputStorePaymentPremiumGiftCode</a> without setting <code>boost_peer</code>) should be used, instead. </p>
<p>Note: to gift a Premium subscriptions to multiple friends, the alternative payment flow <a href="/api/giveaways">described here »</a> (<a href="/constructor/inputStorePaymentPremiumGiftCode">inputStorePaymentPremiumGiftCode</a> without setting <code>boost_peer</code>) must be used, instead. </p>
<pre><code><a href='/constructor/userFull'>userFull</a>#cc997720 flags:<a href='/type/%23'>#</a> blocked:flags.0?<a href='/constructor/true'>true</a> phone_calls_available:flags.4?<a href='/constructor/true'>true</a> phone_calls_private:flags.5?<a href='/constructor/true'>true</a> can_pin_message:flags.7?<a href='/constructor/true'>true</a> has_scheduled:flags.12?<a href='/constructor/true'>true</a> video_calls_available:flags.13?<a href='/constructor/true'>true</a> voice_messages_forbidden:flags.20?<a href='/constructor/true'>true</a> translations_disabled:flags.23?<a href='/constructor/true'>true</a> stories_pinned_available:flags.26?<a href='/constructor/true'>true</a> blocked_my_stories_from:flags.27?<a href='/constructor/true'>true</a> wallpaper_overridden:flags.28?<a href='/constructor/true'>true</a> contact_require_premium:flags.29?<a href='/constructor/true'>true</a> read_dates_private:flags.30?<a href='/constructor/true'>true</a> flags2:<a href='/type/%23'>#</a> sponsored_enabled:flags2.7?<a href='/constructor/true'>true</a> id:<a href='/type/long'>long</a> about:flags.1?<a href='/type/string'>string</a> settings:<a href='/type/PeerSettings'>PeerSettings</a> personal_photo:flags.21?<a href='/type/Photo'>Photo</a> profile_photo:flags.2?<a href='/type/Photo'>Photo</a> fallback_photo:flags.22?<a href='/type/Photo'>Photo</a> notify_settings:<a href='/type/PeerNotifySettings'>PeerNotifySettings</a> bot_info:flags.3?<a href='/type/BotInfo'>BotInfo</a> pinned_msg_id:flags.6?<a href='/type/int'>int</a> common_chats_count:<a href='/type/int'>int</a> folder_id:flags.11?<a href='/type/int'>int</a> ttl_period:flags.14?<a href='/type/int'>int</a> theme_emoticon:flags.15?<a href='/type/string'>string</a> private_forward_name:flags.16?<a href='/type/string'>string</a> bot_group_admin_rights:flags.17?<a href='/type/ChatAdminRights'>ChatAdminRights</a> bot_broadcast_admin_rights:flags.18?<a href='/type/ChatAdminRights'>ChatAdminRights</a> premium_gifts:flags.19?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/PremiumGiftOption'>PremiumGiftOption</a>&gt; wallpaper:flags.24?<a href='/type/WallPaper'>WallPaper</a> stories:flags.25?<a href='/type/PeerStories'>PeerStories</a> business_work_hours:flags2.0?<a href='/type/BusinessWorkHours'>BusinessWorkHours</a> business_location:flags2.1?<a href='/type/BusinessLocation'>BusinessLocation</a> business_greeting_message:flags2.2?<a href='/type/BusinessGreetingMessage'>BusinessGreetingMessage</a> business_away_message:flags2.3?<a href='/type/BusinessAwayMessage'>BusinessAwayMessage</a> business_intro:flags2.4?<a href='/type/BusinessIntro'>BusinessIntro</a> birthday:flags2.5?<a href='/type/Birthday'>Birthday</a> personal_channel_id:flags2.6?<a href='/type/long'>long</a> personal_channel_message:flags2.6?<a href='/type/int'>int</a> = <a href='/type/UserFull'>UserFull</a>;
<a href='/constructor/premiumGiftOption'>premiumGiftOption</a>#74c34319 flags:<a href='/type/%23'>#</a> months:<a href='/type/int'>int</a> currency:<a href='/type/string'>string</a> amount:<a href='/type/long'>long</a> bot_url:<a href='/type/string'>string</a> store_product:flags.0?<a href='/type/string'>string</a> = <a href='/type/PremiumGiftOption'>PremiumGiftOption</a>;

View file

@ -83,7 +83,7 @@
<a href='/method/messages.getStickers'>messages.getStickers</a>#d5a5d3a1 emoticon:<a href='/type/string'>string</a> hash:<a href='/type/long'>long</a> = <a href='/type/messages.Stickers'>messages.Stickers</a>;</code></pre>
<p>When the user opens a private chat with a user they don't have a history with, the UI should display a randomly chosen greeting sticker+invitation to send a message. </p>
<p>To fetch this special list of greeting stickers, invoke <a href="/method/messages.getStickers">messages.getStickers</a> with <code>emoticon=<img class="emoji" src="//telegram.org/img/emoji/40/F09F918B.png" width="20" height="20" alt="👋" /><img class="emoji" src="//telegram.org/img/emoji/40/E2AD90.png" width="20" height="20" alt="⭐️" /></code>. </p>
<p>Note that if a custom <a href="/api/business#business-introduction">Telegram Business introduction »</a> is enabled, the message+sticker specified in <a href="/constructor/userFull">userFull</a>.<code>intro</code> should be used, instead. </p>
<p>Note that if a custom <a href="/api/business#business-introduction">Telegram Business introduction »</a> is enabled, the message+sticker specified in <a href="/constructor/userFull">userFull</a>.<code>intro</code> must be used, instead. </p>
<h3><a class="anchor" href="#emoji-status" id="emoji-status" name="emoji-status"><i class="anchor-icon"></i></a>Emoji status</h3>
<pre><code><a href='/constructor/user'>user</a>#215c4438 flags:<a href='/type/%23'>#</a> self:flags.10?<a href='/constructor/true'>true</a> contact:flags.11?<a href='/constructor/true'>true</a> mutual_contact:flags.12?<a href='/constructor/true'>true</a> deleted:flags.13?<a href='/constructor/true'>true</a> bot:flags.14?<a href='/constructor/true'>true</a> bot_chat_history:flags.15?<a href='/constructor/true'>true</a> bot_nochats:flags.16?<a href='/constructor/true'>true</a> verified:flags.17?<a href='/constructor/true'>true</a> restricted:flags.18?<a href='/constructor/true'>true</a> min:flags.20?<a href='/constructor/true'>true</a> bot_inline_geo:flags.21?<a href='/constructor/true'>true</a> support:flags.23?<a href='/constructor/true'>true</a> scam:flags.24?<a href='/constructor/true'>true</a> apply_min_photo:flags.25?<a href='/constructor/true'>true</a> fake:flags.26?<a href='/constructor/true'>true</a> bot_attach_menu:flags.27?<a href='/constructor/true'>true</a> premium:flags.28?<a href='/constructor/true'>true</a> attach_menu_enabled:flags.29?<a href='/constructor/true'>true</a> flags2:<a href='/type/%23'>#</a> bot_can_edit:flags2.1?<a href='/constructor/true'>true</a> close_friend:flags2.2?<a href='/constructor/true'>true</a> stories_hidden:flags2.3?<a href='/constructor/true'>true</a> stories_unavailable:flags2.4?<a href='/constructor/true'>true</a> contact_require_premium:flags2.10?<a href='/constructor/true'>true</a> bot_business:flags2.11?<a href='/constructor/true'>true</a> id:<a href='/type/long'>long</a> access_hash:flags.0?<a href='/type/long'>long</a> first_name:flags.1?<a href='/type/string'>string</a> last_name:flags.2?<a href='/type/string'>string</a> username:flags.3?<a href='/type/string'>string</a> phone:flags.4?<a href='/type/string'>string</a> photo:flags.5?<a href='/type/UserProfilePhoto'>UserProfilePhoto</a> status:flags.6?<a href='/type/UserStatus'>UserStatus</a> bot_info_version:flags.14?<a href='/type/int'>int</a> restriction_reason:flags.18?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/RestrictionReason'>RestrictionReason</a>&gt; bot_inline_placeholder:flags.19?<a href='/type/string'>string</a> lang_code:flags.22?<a href='/type/string'>string</a> emoji_status:flags.30?<a href='/type/EmojiStatus'>EmojiStatus</a> usernames:flags2.0?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/Username'>Username</a>&gt; stories_max_id:flags2.5?<a href='/type/int'>int</a> color:flags2.8?<a href='/type/PeerColor'>PeerColor</a> profile_color:flags2.9?<a href='/type/PeerColor'>PeerColor</a> = <a href='/type/User'>User</a>;

View file

@ -403,7 +403,7 @@ The <a href="/api/config#stickers-emoji-cache-time">stickers_emoji_cache_time ap
<h4><a class="anchor" href="#greeting-stickers" id="greeting-stickers" name="greeting-stickers"><i class="anchor-icon"></i></a>Greeting stickers</h4>
<p>When the user opens a private chat with a user they don't have a history with, the UI should display a randomly chosen greeting sticker+invitation to send a message. </p>
<p>To fetch this special list of greeting stickers, invoke <a href="/method/messages.getStickers">messages.getStickers</a> with <code>emoticon=<img class="emoji" src="//telegram.org/img/emoji/40/F09F918B.png" width="20" height="20" alt="👋" /><img class="emoji" src="//telegram.org/img/emoji/40/E2AD90.png" width="20" height="20" alt="⭐️" /></code>. </p>
<p>Note that if a custom <a href="/api/business#business-introduction">Telegram Business introduction »</a> is enabled, the message+sticker specified in <a href="/constructor/userFull">userFull</a>.<code>intro</code> should be used, instead. </p>
<p>Note that if a custom <a href="/api/business#business-introduction">Telegram Business introduction »</a> is enabled, the message+sticker specified in <a href="/constructor/userFull">userFull</a>.<code>intro</code> must be used, instead. </p>
<h3><a class="anchor" href="#attached-stickers" id="attached-stickers" name="attached-stickers"><i class="anchor-icon"></i></a>Attached stickers</h3>
<pre><code><a href='/constructor/inputMediaUploadedPhoto'>inputMediaUploadedPhoto</a>#1e287d04 flags:<a href='/type/%23'>#</a> spoiler:flags.2?<a href='/constructor/true'>true</a> file:<a href='/type/InputFile'>InputFile</a> stickers:flags.0?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/InputDocument'>InputDocument</a>&gt; ttl_seconds:flags.1?<a href='/type/int'>int</a> = <a href='/type/InputMedia'>InputMedia</a>;

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 5C CB 0D 00 4C C4 AB 66
0010 | 14 00 00 00 F1 8E 7E BE 58 C9 B5 64 FE 46 36 F6
0020 | F8 CE B1 1D 46 31 51 10</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 94 4C 0B 00 EF D1 AB 66
0010 | 14 00 00 00 F1 8E 7E BE 7B BD B9 63 BC 64 29 17
0020 | 87 F3 B0 F1 57 90 DF BE</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>5CCB0D004CC4AB66</code></td>
<td><code>944C0B00EFD1AB66</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>58C9B564FE4636F6F8CEB11D46315110</code></td>
<td><code>7BBDB963BC64291787F3B0F15790DFBE</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 74 F4 65 4C C4 AB 66
0010 | 6C 00 00 00 63 24 16 05 58 C9 B5 64 FE 46 36 F6
0020 | F8 CE B1 1D 46 31 51 10 4C 0F DA E0 DE 9F D6 70
0030 | 39 C0 6C 90 26 E6 97 42 08 18 20 0A 18 62 DC 69
0040 | D7 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 64 83 40 EF D1 AB 66
0010 | 70 00 00 00 63 24 16 05 7B BD B9 63 BC 64 29 17
0020 | 87 F3 B0 F1 57 90 DF BE 81 22 DC 5E 6A 4C 66 E0
0030 | 03 B4 CC 48 F1 5B 2A 28 08 26 F1 FD D5 CA ED 74
0040 | 33 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>0174F4654CC4AB66</code></td>
<td><code>01648340EFD1AB66</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>6C000000</code> (108 in decimal)</td>
<td><code>70000000</code> (112 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -150,19 +150,19 @@
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>58C9B564FE4636F6F8CEB11D46315110</code></td>
<td><code>7BBDB963BC64291787F3B0F15790DFBE</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>4C0FDAE0DE9FD67039C06C9026E69742</code></td>
<td><code>8122DC5E6A4C66E003B4CC48F15B2A28</code></td>
<td>Server-generated random number</td>
</tr>
<tr>
<td>pq</td>
<td>56, 12</td>
<td><code>0818200A1862DC69D7000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1738400556019116503</td>
<td><code>0826F1FDD5CAED7433000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2806303137502950451</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 = 1738400556019116503</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>1738400556019116503 = 1125991333 * 1543884491</code></p>
<pre><code>p = 1125991333
q = 1543884491</code></pre>
<pre><code>pq = 2806303137502950451</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>2806303137502950451 = 1581175027 * 1774821313</code></p>
<pre><code>p = 1581175027
q = 1774821313</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 18 20 0A 18 62 DC 69 D7 00 00 00
0010 | 04 43 1D 43 A5 00 00 00 04 5C 05 CE CB 00 00 00
0020 | 58 C9 B5 64 FE 46 36 F6 F8 CE B1 1D 46 31 51 10
0030 | 4C 0F DA E0 DE 9F D6 70 39 C0 6C 90 26 E6 97 42
0040 | 37 9E 6B BA F1 6B C5 0D D7 20 6C 66 53 D7 6C 1A
0050 | B0 4D 68 4E FC 18 BD C9 A0 D3 EA D0 83 A5 B0 2A
<pre><code>0000 | 95 5F F5 A9 08 26 F1 FD D5 CA ED 74 33 00 00 00
0010 | 04 5E 3E D0 F3 00 00 00 04 69 C9 9F C1 00 00 00
0020 | 7B BD B9 63 BC 64 29 17 87 F3 B0 F1 57 90 DF BE
0030 | 81 22 DC 5E 6A 4C 66 E0 03 B4 CC 48 F1 5B 2A 28
0040 | 32 16 B1 CE 36 F1 CC 54 97 A1 43 88 58 58 F2 E6
0050 | 8B 09 09 73 BD 61 83 DB 0B 14 29 38 8F E9 54 63
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 = 1543884491</code></pre>
<tr>
<td>pq</td>
<td>4, 12</td>
<td><code>0818200A1862DC69D7000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1738400556019116503</td>
<td><code>0826F1FDD5CAED7433000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2806303137502950451</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>04431D43A5000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1125991333</td>
<td><code>045E3ED0F3000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1581175027</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>045C05CECB000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1543884491</td>
<td><code>0469C99FC1000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1774821313</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>58C9B564FE4636F6F8CEB11D46315110</code></td>
<td><code>7BBDB963BC64291787F3B0F15790DFBE</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>48, 16</td>
<td><code>4C0FDAE0DE9FD67039C06C9026E69742</code></td>
<td><code>8122DC5E6A4C66E003B4CC48F15B2A28</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce</td>
<td>64, 32</td>
<td><code>379E6BBAF16BC50DD7206C6653D76C1A</code> <code>B04D684EFC18BDC9A0D3EAD083A5B02A</code></td>
<td><code>3216B1CE36F1CC5497A143885858F2E6</code> <code>8B090973BD6183DB0B1429388FE95463</code></td>
<td>Client-generated random number</td>
</tr>
<tr>
@ -291,39 +291,39 @@ q = 1543884491</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 = 955FF5A90818200A1862DC69D700000004431D43A5000000045C05CECB00000058C9B564FE4636F6F8CEB11D463151104C0FDAE0DE9FD67039C06C9026E69742379E6BBAF16BC50DD7206C6653D76C1AB04D684EFC18BDC9A0D3EAD083A5B02A02000000
random_padding_bytes = 3C329DF4E700FA6324252A00782C54D902BE10981D198B1D638E087E652B3834C58B57BBBD152A48E84A5ADE1B1F51976DE081DF5ECD69D89EB57A8FEE8C618F6592F100C140B7A22CDD78DC328916E1613B43B14DC4BF5FAD721FBC</code></pre>
<pre><code>data = 955FF5A90826F1FDD5CAED7433000000045E3ED0F30000000469C99FC10000007BBDB963BC64291787F3B0F15790DFBE8122DC5E6A4C66E003B4CC48F15B2A283216B1CE36F1CC5497A143885858F2E68B090973BD6183DB0B1429388FE9546302000000
random_padding_bytes = 5D8F01981ABE72DC63B27E6715AC8096092A5FB8497822BB29BE01EF3D9F0741E4E8ABFE5BC481D8A88F15F72A7D153873523D3C85AA6E9745079DE4D499268D44ED005518FD5ADB4C6E94DCAA2177307FF139C6992CAE3D07515AA6</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 = 613F44EFA4629A4977FE780D6BF7F0A2DE519E4D5938FBFA1010431E5C5034E18890739FE555E38971A07479FC0D946292EEC67483286D6A759018BE17381EB253E5AE73C694FA473EE2D569A552786799D4ECCAC85C896E28BDD1C8273727D96DC9FB60CDD9FE2F1D460C537898EFA2CF39827A2386994B39AB3304B32AD6822614380240BDFEAD80F8FCFFB063A51BD5F6E3383D9D397AA8194CD895824B7D754020234DB77D7C83340F413C2512F9A53060E868AE54BCE965079301D7972FA76766AB26D6E605A2226FB3330FEFC7DD62B2A7300F598F8698EB50B72B712ED1B781814FF0818D20BA5DBB4D663158CC6B64B4651E5D436B5328A8D37EB574</code></pre>
<pre><code>encrypted_data = 661851377A2EC0F9615A31BC4498BBD877412C54D6909B5021BA98494A3788697EA97408F2EA67CA699A41D83FDAD4720D82394522CD367C32549C6EF45A2BF47043290E56C55F8077CA4B3EF403CCD31AEDD12F66E6E13EE3A84078E4F41AD57746CC193E196668654044B7C4E2068D52DE33CCFBBE269AB7ED998B9C0A70C9820A0117307B08C77E27B0FEEAF088C6EAB1B03D65916F03DF589D39A807D282E7DFE02BCC60076FF41F50D30394BC1C607759A61FC08E83DC7511AE7BC2B2439B796C64BD2BBB6949E95197A73F128CCA7CF400F2ABE33D57B1FD2525802B4B3B711A36BD7002825779B3D544C524C4CB9D9DB04A0FBFC67FB32161AA2A09A6</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 60 CB 0D 00 4C C4 AB 66
0010 | 40 01 00 00 BE E4 12 D7 58 C9 B5 64 FE 46 36 F6
0020 | F8 CE B1 1D 46 31 51 10 4C 0F DA E0 DE 9F D6 70
0030 | 39 C0 6C 90 26 E6 97 42 04 43 1D 43 A5 00 00 00
0040 | 04 5C 05 CE CB 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 61 3F 44 EF A4 62 9A 49 77 FE 78 0D
0060 | 6B F7 F0 A2 DE 51 9E 4D 59 38 FB FA 10 10 43 1E
0070 | 5C 50 34 E1 88 90 73 9F E5 55 E3 89 71 A0 74 79
0080 | FC 0D 94 62 92 EE C6 74 83 28 6D 6A 75 90 18 BE
0090 | 17 38 1E B2 53 E5 AE 73 C6 94 FA 47 3E E2 D5 69
00A0 | A5 52 78 67 99 D4 EC CA C8 5C 89 6E 28 BD D1 C8
00B0 | 27 37 27 D9 6D C9 FB 60 CD D9 FE 2F 1D 46 0C 53
00C0 | 78 98 EF A2 CF 39 82 7A 23 86 99 4B 39 AB 33 04
00D0 | B3 2A D6 82 26 14 38 02 40 BD FE AD 80 F8 FC FF
00E0 | B0 63 A5 1B D5 F6 E3 38 3D 9D 39 7A A8 19 4C D8
00F0 | 95 82 4B 7D 75 40 20 23 4D B7 7D 7C 83 34 0F 41
0100 | 3C 25 12 F9 A5 30 60 E8 68 AE 54 BC E9 65 07 93
0110 | 01 D7 97 2F A7 67 66 AB 26 D6 E6 05 A2 22 6F B3
0120 | 33 0F EF C7 DD 62 B2 A7 30 0F 59 8F 86 98 EB 50
0130 | B7 2B 71 2E D1 B7 81 81 4F F0 81 8D 20 BA 5D BB
0140 | 4D 66 31 58 CC 6B 64 B4 65 1E 5D 43 6B 53 28 A8
0150 | D3 7E B5 74</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 2C A8 0B 00 EF D1 AB 66
0010 | 40 01 00 00 BE E4 12 D7 7B BD B9 63 BC 64 29 17
0020 | 87 F3 B0 F1 57 90 DF BE 81 22 DC 5E 6A 4C 66 E0
0030 | 03 B4 CC 48 F1 5B 2A 28 04 5E 3E D0 F3 00 00 00
0040 | 04 69 C9 9F C1 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 66 18 51 37 7A 2E C0 F9 61 5A 31 BC
0060 | 44 98 BB D8 77 41 2C 54 D6 90 9B 50 21 BA 98 49
0070 | 4A 37 88 69 7E A9 74 08 F2 EA 67 CA 69 9A 41 D8
0080 | 3F DA D4 72 0D 82 39 45 22 CD 36 7C 32 54 9C 6E
0090 | F4 5A 2B F4 70 43 29 0E 56 C5 5F 80 77 CA 4B 3E
00A0 | F4 03 CC D3 1A ED D1 2F 66 E6 E1 3E E3 A8 40 78
00B0 | E4 F4 1A D5 77 46 CC 19 3E 19 66 68 65 40 44 B7
00C0 | C4 E2 06 8D 52 DE 33 CC FB BE 26 9A B7 ED 99 8B
00D0 | 9C 0A 70 C9 82 0A 01 17 30 7B 08 C7 7E 27 B0 FE
00E0 | EA F0 88 C6 EA B1 B0 3D 65 91 6F 03 DF 58 9D 39
00F0 | A8 07 D2 82 E7 DF E0 2B CC 60 07 6F F4 1F 50 D3
0100 | 03 94 BC 1C 60 77 59 A6 1F C0 8E 83 DC 75 11 AE
0110 | 7B C2 B2 43 9B 79 6C 64 BD 2B BB 69 49 E9 51 97
0120 | A7 3F 12 8C CA 7C F4 00 F2 AB E3 3D 57 B1 FD 25
0130 | 25 80 2B 4B 3B 71 1A 36 BD 70 02 82 57 79 B3 D5
0140 | 44 C5 24 C4 CB 9D 9D B0 4A 0F BF C6 7F B3 21 61
0150 | AA 2A 09 A6</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 = 3C329DF4E700FA6324252A00782C54D902BE10981D198B1D638E087E6
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>60CB0D004CC4AB66</code></td>
<td><code>2CA80B00EFD1AB66</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 = 3C329DF4E700FA6324252A00782C54D902BE10981D198B1D638E087E6
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>58C9B564FE4636F6F8CEB11D46315110</code></td>
<td><code>7BBDB963BC64291787F3B0F15790DFBE</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>4C0FDAE0DE9FD67039C06C9026E69742</code></td>
<td><code>8122DC5E6A4C66E003B4CC48F15B2A28</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>p</td>
<td>56, 8</td>
<td><code>04431D43A5000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1125991333</td>
<td><code>045E3ED0F3000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1581175027</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>045C05CECB000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1543884491</td>
<td><code>0469C99FC1000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1774821313</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 = 3C329DF4E700FA6324252A00782C54D902BE10981D198B1D638E087E6
<tr>
<td>encrypted_data</td>
<td>80, 260</td>
<td><code>FE000100613F44EFA4629A4977FE780D</code> <code>6BF7F0A2DE519E4D5938FBFA1010431E</code> <code>5C5034E18890739FE555E38971A07479</code> <code>FC0D946292EEC67483286D6A759018BE</code> <code>17381EB253E5AE73C694FA473EE2D569</code> <code>A552786799D4ECCAC85C896E28BDD1C8</code> <code>273727D96DC9FB60CDD9FE2F1D460C53</code> <code>7898EFA2CF39827A2386994B39AB3304</code> <code>B32AD6822614380240BDFEAD80F8FCFF</code> <code>B063A51BD5F6E3383D9D397AA8194CD8</code> <code>95824B7D754020234DB77D7C83340F41</code> <code>3C2512F9A53060E868AE54BCE9650793</code> <code>01D7972FA76766AB26D6E605A2226FB3</code> <code>330FEFC7DD62B2A7300F598F8698EB50</code> <code>B72B712ED1B781814FF0818D20BA5DBB</code> <code>4D663158CC6B64B4651E5D436B5328A8</code><br> <code>D37EB574</code></td>
<td><code>FE000100661851377A2EC0F9615A31BC</code> <code>4498BBD877412C54D6909B5021BA9849</code> <code>4A3788697EA97408F2EA67CA699A41D8</code> <code>3FDAD4720D82394522CD367C32549C6E</code> <code>F45A2BF47043290E56C55F8077CA4B3E</code> <code>F403CCD31AEDD12F66E6E13EE3A84078</code> <code>E4F41AD57746CC193E196668654044B7</code> <code>C4E2068D52DE33CCFBBE269AB7ED998B</code> <code>9C0A70C9820A0117307B08C77E27B0FE</code> <code>EAF088C6EAB1B03D65916F03DF589D39</code> <code>A807D282E7DFE02BCC60076FF41F50D3</code> <code>0394BC1C607759A61FC08E83DC7511AE</code> <code>7BC2B2439B796C64BD2BBB6949E95197</code> <code>A73F128CCA7CF400F2ABE33D57B1FD25</code> <code>25802B4B3B711A36BD7002825779B3D5</code> <code>44C524C4CB9D9DB04A0FBFC67FB32161</code><br> <code>AA2A09A6</code></td>
<td>Value generated above</td>
</tr>
</tbody>
@ -402,47 +402,47 @@ random_padding_bytes = 3C329DF4E700FA6324252A00782C54D902BE10981D198B1D638E087E6
<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 A0 19 36 4D C4 AB 66
0010 | C4 02 00 00 5C 07 E8 D0 58 C9 B5 64 FE 46 36 F6
0020 | F8 CE B1 1D 46 31 51 10 4C 0F DA E0 DE 9F D6 70
0030 | 39 C0 6C 90 26 E6 97 42 FE 50 02 00 F3 1B 3E 37
0040 | B9 83 C8 42 58 24 85 CA CF 5E FC 94 8F E0 DD 02
0050 | 15 F3 EC 08 B6 4A CB 6D 55 B1 F8 D3 39 87 31 24
0060 | 74 02 F5 33 8A AB 36 EB 14 86 8D A1 C7 0A 76 99
0070 | AF 60 87 30 2A 6B 85 64 FA 13 38 27 A5 F7 48 7D
0080 | 9D 80 24 C9 03 AE 59 BC 42 E2 23 1F 45 17 DF 75
0090 | DF 41 DC F4 75 22 7F 46 E4 DF AF FB 4D 3C 77 A9
00A0 | CB 5E B1 69 82 8B 8E 15 B1 7C 26 F8 F8 A1 24 9A
00B0 | A0 AB D7 24 AD 38 78 16 6F 90 60 F7 F1 BF A1 04
00C0 | E6 34 DB 11 13 70 A4 FE 76 D7 E5 F5 C8 9E EF 93
00D0 | 5A 95 92 AC 3D B1 22 FD 02 C7 79 E2 53 E8 26 29
00E0 | 6C A9 18 58 45 DD 02 5A D0 38 8E B8 28 B2 80 68
00F0 | 43 64 03 F1 F7 7B 7D D0 20 C1 2C 37 13 05 38 78
0100 | E6 35 CF E8 77 F1 4B F8 C9 EF 84 EE 6B F4 70 F0
0110 | B9 24 71 11 C8 6A F1 C2 1B 8D F6 56 0F 9A 15 74
0120 | BC 06 D2 C9 E5 AE 45 A2 51 E8 CF 4C 16 6F 36 2E
0130 | 24 BC 78 C1 5A 5D AB 3D DB B3 FA F6 8E BB 44 0D
0140 | FD 63 A4 BD F3 A5 B9 20 29 17 BA B1 80 79 FC 29
0150 | 3E 7D 2D AA 69 54 90 BD EE F6 6A 6F 90 CC DC DD
0160 | 03 AC 26 05 ED 90 5B 75 3F D7 02 B5 67 6D 32 5C
0170 | 33 A3 88 22 2E 12 C3 D8 36 8B 3D 59 07 55 B9 D0
0180 | 47 66 32 58 D0 B1 5A 5C 52 CB C6 75 9A 35 CF FF
0190 | 9C 99 B7 3D 5A 21 67 C8 AE B9 DF 05 8F EF 19 81
01A0 | 29 8A 9D 6D 85 6D 68 46 A5 A3 A6 26 46 C3 2C FD
01B0 | 24 C8 63 E1 61 D7 DC B9 6C 08 6E 78 66 91 42 AE
01C0 | 51 90 77 71 1D 1C 3F 53 A1 A3 05 05 70 1B 54 36
01D0 | 73 9E 80 F8 F2 F3 8F 9C 30 44 4C 2C 7C 56 49 F3
01E0 | 8E 3E 4D 6B A5 09 84 8A 49 E0 3E 53 FC A0 93 52
01F0 | 6B 71 61 F2 B3 50 E2 5E 46 A7 2C 4B 36 C6 CC F1
0200 | 40 92 2E 10 BA 88 F1 FD A7 15 A5 C4 2A 80 D4 F1
0210 | CE F9 27 81 BA 2E 99 FB C1 05 CD 9B 49 3E 3B DB
0220 | C7 78 EC 25 C2 F2 25 D8 AB 08 E7 F1 2D EE FD 3C
0230 | 69 8B 9F 45 BE 52 AD DE 4B 9F 0E 43 23 2D DF E8
0240 | D4 EB EB 39 96 D7 77 EF 60 78 A9 54 46 1D 9A 03
0250 | 6D 2C BD 39 93 D3 B5 4F D7 3E 92 E9 EE 6F A7 E0
0260 | 1A 0C 26 4E D1 A0 24 3C 43 16 1C 39 7D A0 9B 07
0270 | 56 55 73 1C 86 9B 80 8E CD BD D0 8E 2C B4 A6 7B
0280 | AB E9 1C 69 06 96 8F 0F E1 1E 7C 49</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 28 71 FD EF D1 AB 66
0010 | 90 02 00 00 5C 07 E8 D0 7B BD B9 63 BC 64 29 17
0020 | 87 F3 B0 F1 57 90 DF BE 81 22 DC 5E 6A 4C 66 E0
0030 | 03 B4 CC 48 F1 5B 2A 28 FE 50 02 00 4E 98 D4 E2
0040 | 9F E3 B9 55 3A 84 0F 08 5B 15 32 84 F8 8D 65 50
0050 | F6 8C 40 AF 33 3F C0 09 D4 C8 D7 9D 72 9A A8 B6
0060 | 9B 37 0D 9C E1 19 BF 1B 21 BB A1 2B 23 C9 F1 68
0070 | 1A 9C 9B B5 78 7F EA FB C6 AA 47 03 5B A0 AD C6
0080 | EA F8 A4 1B D2 49 09 B1 BC A7 BB 42 AE 3A 60 CA
0090 | CE 8C F6 69 E1 41 29 DD BD 23 EB 33 39 27 45 EA
00A0 | E5 61 32 6A 1C 7E 27 EB DB B6 09 DA 11 15 BE 2B
00B0 | 5F AC 1C D3 4F D2 CF ED 60 7E 1B E8 24 39 FB 70
00C0 | 90 27 7E DC 22 CF C7 10 0F 7E E1 33 33 3F 43 BC
00D0 | 80 3D 4C 86 92 80 DA 9F 5D BF 38 CF 90 10 58 8B
00E0 | 14 BE 0D 26 1D 43 CA DD DB 0D 00 65 AA 08 81 95
00F0 | E6 90 6A D3 84 4E AE 24 1C 13 99 F4 E4 7C 68 9C
0100 | 66 81 E4 7A BE 9C F0 15 06 53 A6 67 6B AD 57 66
0110 | CC 41 CB 22 2D 5F 60 58 DD A2 F0 6E AD B4 5A D6
0120 | E8 70 11 9D 1B F8 91 FF 19 AD CB FC D4 C0 AC 18
0130 | FF 42 66 B2 F4 CB 82 A7 B1 44 87 15 3C 2F 57 06
0140 | 86 08 91 B0 C0 D8 E8 BC 7D 88 A8 F5 7F E9 CA 06
0150 | 0F 10 76 4D 22 77 9D BB 5A F4 B7 35 26 D6 62 B3
0160 | C1 16 2E D5 59 DA 59 20 87 11 0A 09 45 4D E2 C0
0170 | 36 00 4F B4 4D 05 D2 57 00 E3 32 E1 5B 2E A9 82
0180 | A1 C9 24 21 22 24 06 25 54 5B BC 5F 4D D6 B5 24
0190 | DA 0C 59 0E DE A1 B2 62 C4 8B 7A 35 47 C3 BA F6
01A0 | 04 F8 12 83 96 5B 87 C3 1A 84 B5 F0 B5 59 B2 10
01B0 | B9 6A 41 01 15 B0 60 FE AF 48 94 25 3E 27 6A 60
01C0 | D5 C5 1C 77 C1 20 02 22 B6 6E 75 B9 EB 87 18 AC
01D0 | 4E A0 D3 D6 F4 EC 26 15 D5 6B 24 B1 0C 40 93 16
01E0 | AE 93 09 F7 95 2F 95 18 3A 1D D0 B7 2E D2 F9 6A
01F0 | 12 87 40 7B A5 D6 9B 6A 72 64 37 DA 35 D2 AF 05
0200 | 8A 40 4F DB 4A E2 D4 63 76 E8 B8 47 8D 9C 92 CB
0210 | 9C F9 7B E6 68 F6 9D 74 03 6F 1C F8 06 B7 4F 29
0220 | AA DD 1D D9 B7 EE 48 44 A3 14 CB EF 50 B3 D5 B6
0230 | BC BE 14 3F 7A C3 FD 1C C1 B8 DA A8 22 3D AF 45
0240 | BC F5 CC 84 A7 0F 30 44 5D 9E 03 30 56 01 BF 87
0250 | 0D 32 C8 51 98 0E D4 F6 FF 10 22 B0 29 AC E7 13
0260 | 78 7F 01 60 07 EC 42 85 AC 51 BA F5 B1 3A 28 1B
0270 | 3D 4A 89 7E A1 04 0D 98 B8 4D E2 0F 93 8F 1C 36
0280 | 1D 19 A6 CF 38 67 60 65 B5 A3 C5 A8</code></pre>
<p>Payload (de)serialization:</p>
<pre><code>server_DH_params_ok#d0e8075c nonce:int128 server_nonce:int128 encrypted_answer:string = Server_DH_Params;</code></pre>
<table class="table">
@ -464,13 +464,13 @@ random_padding_bytes = 3C329DF4E700FA6324252A00782C54D902BE10981D198B1D638E087E6
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>01A019364DC4AB66</code></td>
<td><code>012871FDEFD1AB66</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>C4020000</code> (708 in decimal)</td>
<td><code>90020000</code> (656 in decimal)</td>
<td>Message body length</td>
</tr>
<tr>
@ -482,19 +482,19 @@ random_padding_bytes = 3C329DF4E700FA6324252A00782C54D902BE10981D198B1D638E087E6
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>58C9B564FE4636F6F8CEB11D46315110</code></td>
<td><code>7BBDB963BC64291787F3B0F15790DFBE</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>4C0FDAE0DE9FD67039C06C9026E69742</code></td>
<td><code>8122DC5E6A4C66E003B4CC48F15B2A28</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_answer</td>
<td>56, 596</td>
<td><code>FE500200F31B3E37B983C842582485CA</code> <code>CF5EFC948FE0DD0215F3EC08B64ACB6D</code> <code>55B1F8D3398731247402F5338AAB36EB</code> <code>14868DA1C70A7699AF6087302A6B8564</code> <code>FA133827A5F7487D9D8024C903AE59BC</code> <code>42E2231F4517DF75DF41DCF475227F46</code> <code>E4DFAFFB4D3C77A9CB5EB169828B8E15</code> <code>B17C26F8F8A1249AA0ABD724AD387816</code> <code>6F9060F7F1BFA104E634DB111370A4FE</code> <code>76D7E5F5C89EEF935A9592AC3DB122FD</code> <code>02C779E253E826296CA9185845DD025A</code> <code>D0388EB828B28068436403F1F77B7DD0</code> <code>20C12C3713053878E635CFE877F14BF8</code> <code>C9EF84EE6BF470F0B9247111C86AF1C2</code> <code>1B8DF6560F9A1574BC06D2C9E5AE45A2</code> <code>51E8CF4C166F362E24BC78C15A5DAB3D</code> <code>DBB3FAF68EBB440DFD63A4BDF3A5B920</code> <code>2917BAB18079FC293E7D2DAA695490BD</code> <code>EEF66A6F90CCDCDD03AC2605ED905B75</code> <code>3FD702B5676D325C33A388222E12C3D8</code> <code>368B3D590755B9D047663258D0B15A5C</code> <code>52CBC6759A35CFFF9C99B73D5A2167C8</code> <code>AEB9DF058FEF1981298A9D6D856D6846</code> <code>A5A3A62646C32CFD24C863E161D7DCB9</code> <code>6C086E78669142AE519077711D1C3F53</code> <code>A1A30505701B5436739E80F8F2F38F9C</code> <code>30444C2C7C5649F38E3E4D6BA509848A</code> <code>49E03E53FCA093526B7161F2B350E25E</code> <code>46A72C4B36C6CCF140922E10BA88F1FD</code> <code>A715A5C42A80D4F1CEF92781BA2E99FB</code> <code>C105CD9B493E3BDBC778EC25C2F225D8</code> <code>AB08E7F12DEEFD3C698B9F45BE52ADDE</code> <code>4B9F0E43232DDFE8D4EBEB3996D777EF</code> <code>6078A954461D9A036D2CBD3993D3B54F</code> <code>D73E92E9EE6FA7E01A0C264ED1A0243C</code> <code>43161C397DA09B075655731C869B808E</code> <code>CDBDD08E2CB4A67BABE91C6906968F0F</code><br> <code>E11E7C49</code></td>
<td><code>FE5002004E98D4E29FE3B9553A840F08</code> <code>5B153284F88D6550F68C40AF333FC009</code> <code>D4C8D79D729AA8B69B370D9CE119BF1B</code> <code>21BBA12B23C9F1681A9C9BB5787FEAFB</code> <code>C6AA47035BA0ADC6EAF8A41BD24909B1</code> <code>BCA7BB42AE3A60CACE8CF669E14129DD</code> <code>BD23EB33392745EAE561326A1C7E27EB</code> <code>DBB609DA1115BE2B5FAC1CD34FD2CFED</code> <code>607E1BE82439FB7090277EDC22CFC710</code> <code>0F7EE133333F43BC803D4C869280DA9F</code> <code>5DBF38CF9010588B14BE0D261D43CADD</code> <code>DB0D0065AA088195E6906AD3844EAE24</code> <code>1C1399F4E47C689C6681E47ABE9CF015</code> <code>0653A6676BAD5766CC41CB222D5F6058</code> <code>DDA2F06EADB45AD6E870119D1BF891FF</code> <code>19ADCBFCD4C0AC18FF4266B2F4CB82A7</code> <code>B14487153C2F5706860891B0C0D8E8BC</code> <code>7D88A8F57FE9CA060F10764D22779DBB</code> <code>5AF4B73526D662B3C1162ED559DA5920</code> <code>87110A09454DE2C036004FB44D05D257</code> <code>00E332E15B2EA982A1C9242122240625</code> <code>545BBC5F4DD6B524DA0C590EDEA1B262</code> <code>C48B7A3547C3BAF604F81283965B87C3</code> <code>1A84B5F0B559B210B96A410115B060FE</code> <code>AF4894253E276A60D5C51C77C1200222</code> <code>B66E75B9EB8718AC4EA0D3D6F4EC2615</code> <code>D56B24B10C409316AE9309F7952F9518</code> <code>3A1DD0B72ED2F96A1287407BA5D69B6A</code> <code>726437DA35D2AF058A404FDB4AE2D463</code> <code>76E8B8478D9C92CB9CF97BE668F69D74</code> <code>036F1CF806B74F29AADD1DD9B7EE4844</code> <code>A314CBEF50B3D5B6BCBE143F7AC3FD1C</code> <code>C1B8DAA8223DAF45BCF5CC84A70F3044</code> <code>5D9E03305601BF870D32C851980ED4F6</code> <code>FF1022B029ACE713787F016007EC4285</code> <code>AC51BAF5B13A281B3D4A897EA1040D98</code> <code>B84DE20F938F1C361D19A6CF38676065</code><br> <code>B5A3C5A8</code></td>
<td>See below</td>
</tr>
</tbody>
@ -502,20 +502,20 @@ random_padding_bytes = 3C329DF4E700FA6324252A00782C54D902BE10981D198B1D638E087E6
<!-- 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 = F31B3E37B983C842582485CACF5EFC948FE0DD0215F3EC08B64ACB6D55B1F8D3398731247402F5338AAB36EB14868DA1C70A7699AF6087302A6B8564FA133827A5F7487D9D8024C903AE59BC42E2231F4517DF75DF41DCF475227F46E4DFAFFB4D3C77A9CB5EB169828B8E15B17C26F8F8A1249AA0ABD724AD3878166F9060F7F1BFA104E634DB111370A4FE76D7E5F5C89EEF935A9592AC3DB122FD02C779E253E826296CA9185845DD025AD0388EB828B28068436403F1F77B7DD020C12C3713053878E635CFE877F14BF8C9EF84EE6BF470F0B9247111C86AF1C21B8DF6560F9A1574BC06D2C9E5AE45A251E8CF4C166F362E24BC78C15A5DAB3DDBB3FAF68EBB440DFD63A4BDF3A5B9202917BAB18079FC293E7D2DAA695490BDEEF66A6F90CCDCDD03AC2605ED905B753FD702B5676D325C33A388222E12C3D8368B3D590755B9D047663258D0B15A5C52CBC6759A35CFFF9C99B73D5A2167C8AEB9DF058FEF1981298A9D6D856D6846A5A3A62646C32CFD24C863E161D7DCB96C086E78669142AE519077711D1C3F53A1A30505701B5436739E80F8F2F38F9C30444C2C7C5649F38E3E4D6BA509848A49E03E53FCA093526B7161F2B350E25E46A72C4B36C6CCF140922E10BA88F1FDA715A5C42A80D4F1CEF92781BA2E99FBC105CD9B493E3BDBC778EC25C2F225D8AB08E7F12DEEFD3C698B9F45BE52ADDE4B9F0E43232DDFE8D4EBEB3996D777EF6078A954461D9A036D2CBD3993D3B54FD73E92E9EE6FA7E01A0C264ED1A0243C43161C397DA09B075655731C869B808ECDBDD08E2CB4A67BABE91C6906968F0FE11E7C49
tmp_aes_key = F3703B4E69009BC24510144B929AE5883CA088B12CF5A5E7354327A7701325D9
tmp_aes_iv = 8ABE130C3F744CD23D434583B7C96C2E7CBE25DB058A0776C6BCFC77379E6BBA</code></pre>
<pre><code>encrypted_answer = 4E98D4E29FE3B9553A840F085B153284F88D6550F68C40AF333FC009D4C8D79D729AA8B69B370D9CE119BF1B21BBA12B23C9F1681A9C9BB5787FEAFBC6AA47035BA0ADC6EAF8A41BD24909B1BCA7BB42AE3A60CACE8CF669E14129DDBD23EB33392745EAE561326A1C7E27EBDBB609DA1115BE2B5FAC1CD34FD2CFED607E1BE82439FB7090277EDC22CFC7100F7EE133333F43BC803D4C869280DA9F5DBF38CF9010588B14BE0D261D43CADDDB0D0065AA088195E6906AD3844EAE241C1399F4E47C689C6681E47ABE9CF0150653A6676BAD5766CC41CB222D5F6058DDA2F06EADB45AD6E870119D1BF891FF19ADCBFCD4C0AC18FF4266B2F4CB82A7B14487153C2F5706860891B0C0D8E8BC7D88A8F57FE9CA060F10764D22779DBB5AF4B73526D662B3C1162ED559DA592087110A09454DE2C036004FB44D05D25700E332E15B2EA982A1C9242122240625545BBC5F4DD6B524DA0C590EDEA1B262C48B7A3547C3BAF604F81283965B87C31A84B5F0B559B210B96A410115B060FEAF4894253E276A60D5C51C77C1200222B66E75B9EB8718AC4EA0D3D6F4EC2615D56B24B10C409316AE9309F7952F95183A1DD0B72ED2F96A1287407BA5D69B6A726437DA35D2AF058A404FDB4AE2D46376E8B8478D9C92CB9CF97BE668F69D74036F1CF806B74F29AADD1DD9B7EE4844A314CBEF50B3D5B6BCBE143F7AC3FD1CC1B8DAA8223DAF45BCF5CC84A70F30445D9E03305601BF870D32C851980ED4F6FF1022B029ACE713787F016007EC4285AC51BAF5B13A281B3D4A897EA1040D98B84DE20F938F1C361D19A6CF38676065B5A3C5A8
tmp_aes_key = BC92457F9E912DECD5B954A07A9DD04A42A4307A27197EF5F71FC63B3FC76AF3
tmp_aes_iv = 1F7F8549D862AD8EE1FDB95D320AF75C01C8F5BE794F8940628DF95C3216B1CE</code></pre>
<!-- end server_DH_inner_data_input -->
<p>Yielding:</p>
<!-- start server_DH_inner_data_output -->
<pre><code>answer_with_hash = 5B825ED18701953E4AA704731A71AF592B1E2DBEBA0D89B558C9B564FE4636F6F8CEB11D463151104C0FDAE0DE9FD67039C06C9026E6974203000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE0001006FC44EAF4853052C49F1EA4E92339561A2559EC65E93A4FFF173E13C8456B60A3799345FD3B10DB7233DADECF31C8FCB891E8DE1DF8454B228ACE02A126F47A7599D5FE50831D971C9115F98DE04C8EC7110CB463135E046255FBA4D12E4B3F817578C2A51389ADA046B8CDB9A357AD0B2CE57CFBDFE816466DCB2CB2B29A4E96C2A3DD03A9DA93DAC17140DC8212308810B32BB6534DC8026638B17BE5089D8242C7D69F9502D16EC3F48CFD6161B617D31629D96FF4165D72F8FE5B242A7D39BF35E53FA13FD8C69ABFEFDF2FA87D0B432FC55E93B1C67E4574496D03B97CF12E6533E416102B541E9D2FE1BC4EA1A770EEFD871983E999BDDDDECEF7DDFC74DC4AB668C661ABD3A8E421E
answer = BA0D89B558C9B564FE4636F6F8CEB11D463151104C0FDAE0DE9FD67039C06C9026E6974203000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE0001006FC44EAF4853052C49F1EA4E92339561A2559EC65E93A4FFF173E13C8456B60A3799345FD3B10DB7233DADECF31C8FCB891E8DE1DF8454B228ACE02A126F47A7599D5FE50831D971C9115F98DE04C8EC7110CB463135E046255FBA4D12E4B3F817578C2A51389ADA046B8CDB9A357AD0B2CE57CFBDFE816466DCB2CB2B29A4E96C2A3DD03A9DA93DAC17140DC8212308810B32BB6534DC8026638B17BE5089D8242C7D69F9502D16EC3F48CFD6161B617D31629D96FF4165D72F8FE5B242A7D39BF35E53FA13FD8C69ABFEFDF2FA87D0B432FC55E93B1C67E4574496D03B97CF12E6533E416102B541E9D2FE1BC4EA1A770EEFD871983E999BDDDDECEF7DDFC74DC4AB668C661ABD3A8E421E</code></pre>
<pre><code>answer_with_hash = B5D908327D5A5E2BE18AEB0544CDC65AE3EF6A18BA0D89B57BBDB963BC64291787F3B0F15790DFBE8122DC5E6A4C66E003B4CC48F15B2A2803000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100A927C1044AF0DB635BF0FA645663B192B1E11A19E5D9C341A59411E56F9A5F944820CA7F3BEA5CA3EAA0932DB6E78472B6DBCEB33C008775499D73C356B876AF2F7A47951119F207AE17B393BF7C93EB9B4E47826843AAB6A1B337C5FCB4F4C5957ED67177FA6F2197D4C7F2159B42233586FC03086D25BCF453AC0049F5DF57D0C69C08894A450F241AA4A4A9AFEFA7ED818C7703A088743D161F1763D36D477ED5169FEEC8D27C962B7EDBEDD401B9A2DAA8EBF15F6BC38F9309DEDE834FBE83CCB98CA4DAD057955EF70087D116867947F18F3D29C506767E3CF69FBE93F046DC1E74DAFACCB1107CF513D5743691304186E02F78E5D1ECD706DB73B47D47EFD1AB66A179D51D7C3A76A3
answer = BA0D89B57BBDB963BC64291787F3B0F15790DFBE8122DC5E6A4C66E003B4CC48F15B2A2803000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100A927C1044AF0DB635BF0FA645663B192B1E11A19E5D9C341A59411E56F9A5F944820CA7F3BEA5CA3EAA0932DB6E78472B6DBCEB33C008775499D73C356B876AF2F7A47951119F207AE17B393BF7C93EB9B4E47826843AAB6A1B337C5FCB4F4C5957ED67177FA6F2197D4C7F2159B42233586FC03086D25BCF453AC0049F5DF57D0C69C08894A450F241AA4A4A9AFEFA7ED818C7703A088743D161F1763D36D477ED5169FEEC8D27C962B7EDBEDD401B9A2DAA8EBF15F6BC38F9309DEDE834FBE83CCB98CA4DAD057955EF70087D116867947F18F3D29C506767E3CF69FBE93F046DC1E74DAFACCB1107CF513D5743691304186E02F78E5D1ECD706DB73B47D47EFD1AB66A179D51D7C3A76A3</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 58 C9 B5 64 FE 46 36 F6 F8 CE B1 1D
0010 | 46 31 51 10 4C 0F DA E0 DE 9F D6 70 39 C0 6C 90
0020 | 26 E6 97 42 03 00 00 00 FE 00 01 00 C7 1C AE B9
<pre><code>0000 | BA 0D 89 B5 7B BD B9 63 BC 64 29 17 87 F3 B0 F1
0010 | 57 90 DF BE 81 22 DC 5E 6A 4C 66 E0 03 B4 CC 48
0020 | F1 5B 2A 28 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 = BA0D89B558C9B564FE4636F6F8CEB11D463151104C0FDAE0DE9FD67039C06C9026E6974
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 | 6F C4 4E AF 48 53 05 2C 49 F1 EA 4E 92 33 95 61
0140 | A2 55 9E C6 5E 93 A4 FF F1 73 E1 3C 84 56 B6 0A
0150 | 37 99 34 5F D3 B1 0D B7 23 3D AD EC F3 1C 8F CB
0160 | 89 1E 8D E1 DF 84 54 B2 28 AC E0 2A 12 6F 47 A7
0170 | 59 9D 5F E5 08 31 D9 71 C9 11 5F 98 DE 04 C8 EC
0180 | 71 10 CB 46 31 35 E0 46 25 5F BA 4D 12 E4 B3 F8
0190 | 17 57 8C 2A 51 38 9A DA 04 6B 8C DB 9A 35 7A D0
01A0 | B2 CE 57 CF BD FE 81 64 66 DC B2 CB 2B 29 A4 E9
01B0 | 6C 2A 3D D0 3A 9D A9 3D AC 17 14 0D C8 21 23 08
01C0 | 81 0B 32 BB 65 34 DC 80 26 63 8B 17 BE 50 89 D8
01D0 | 24 2C 7D 69 F9 50 2D 16 EC 3F 48 CF D6 16 1B 61
01E0 | 7D 31 62 9D 96 FF 41 65 D7 2F 8F E5 B2 42 A7 D3
01F0 | 9B F3 5E 53 FA 13 FD 8C 69 AB FE FD F2 FA 87 D0
0200 | B4 32 FC 55 E9 3B 1C 67 E4 57 44 96 D0 3B 97 CF
0210 | 12 E6 53 3E 41 61 02 B5 41 E9 D2 FE 1B C4 EA 1A
0220 | 77 0E EF D8 71 98 3E 99 9B DD DD EC EF 7D DF C7
0230 | 4D C4 AB 66</code></pre>
0130 | A9 27 C1 04 4A F0 DB 63 5B F0 FA 64 56 63 B1 92
0140 | B1 E1 1A 19 E5 D9 C3 41 A5 94 11 E5 6F 9A 5F 94
0150 | 48 20 CA 7F 3B EA 5C A3 EA A0 93 2D B6 E7 84 72
0160 | B6 DB CE B3 3C 00 87 75 49 9D 73 C3 56 B8 76 AF
0170 | 2F 7A 47 95 11 19 F2 07 AE 17 B3 93 BF 7C 93 EB
0180 | 9B 4E 47 82 68 43 AA B6 A1 B3 37 C5 FC B4 F4 C5
0190 | 95 7E D6 71 77 FA 6F 21 97 D4 C7 F2 15 9B 42 23
01A0 | 35 86 FC 03 08 6D 25 BC F4 53 AC 00 49 F5 DF 57
01B0 | D0 C6 9C 08 89 4A 45 0F 24 1A A4 A4 A9 AF EF A7
01C0 | ED 81 8C 77 03 A0 88 74 3D 16 1F 17 63 D3 6D 47
01D0 | 7E D5 16 9F EE C8 D2 7C 96 2B 7E DB ED D4 01 B9
01E0 | A2 DA A8 EB F1 5F 6B C3 8F 93 09 DE DE 83 4F BE
01F0 | 83 CC B9 8C A4 DA D0 57 95 5E F7 00 87 D1 16 86
0200 | 79 47 F1 8F 3D 29 C5 06 76 7E 3C F6 9F BE 93 F0
0210 | 46 DC 1E 74 DA FA CC B1 10 7C F5 13 D5 74 36 91
0220 | 30 41 86 E0 2F 78 E5 D1 EC D7 06 DB 73 B4 7D 47
0230 | EF D1 AB 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 = BA0D89B558C9B564FE4636F6F8CEB11D463151104C0FDAE0DE9FD67039C06C9026E6974
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>58C9B564FE4636F6F8CEB11D46315110</code></td>
<td><code>7BBDB963BC64291787F3B0F15790DFBE</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>4C0FDAE0DE9FD67039C06C9026E69742</code></td>
<td><code>8122DC5E6A4C66E003B4CC48F15B2A28</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
@ -594,13 +594,13 @@ answer = BA0D89B558C9B564FE4636F6F8CEB11D463151104C0FDAE0DE9FD67039C06C9026E6974
<tr>
<td>g_a</td>
<td>300, 260</td>
<td><code>FE0001006FC44EAF4853052C49F1EA4E</code> <code>92339561A2559EC65E93A4FFF173E13C</code> <code>8456B60A3799345FD3B10DB7233DADEC</code> <code>F31C8FCB891E8DE1DF8454B228ACE02A</code> <code>126F47A7599D5FE50831D971C9115F98</code> <code>DE04C8EC7110CB463135E046255FBA4D</code> <code>12E4B3F817578C2A51389ADA046B8CDB</code> <code>9A357AD0B2CE57CFBDFE816466DCB2CB</code> <code>2B29A4E96C2A3DD03A9DA93DAC17140D</code> <code>C8212308810B32BB6534DC8026638B17</code> <code>BE5089D8242C7D69F9502D16EC3F48CF</code> <code>D6161B617D31629D96FF4165D72F8FE5</code> <code>B242A7D39BF35E53FA13FD8C69ABFEFD</code> <code>F2FA87D0B432FC55E93B1C67E4574496</code> <code>D03B97CF12E6533E416102B541E9D2FE</code> <code>1BC4EA1A770EEFD871983E999BDDDDEC</code><br> <code>EF7DDFC7</code></td>
<td><code>FE000100A927C1044AF0DB635BF0FA64</code> <code>5663B192B1E11A19E5D9C341A59411E5</code> <code>6F9A5F944820CA7F3BEA5CA3EAA0932D</code> <code>B6E78472B6DBCEB33C008775499D73C3</code> <code>56B876AF2F7A47951119F207AE17B393</code> <code>BF7C93EB9B4E47826843AAB6A1B337C5</code> <code>FCB4F4C5957ED67177FA6F2197D4C7F2</code> <code>159B42233586FC03086D25BCF453AC00</code> <code>49F5DF57D0C69C08894A450F241AA4A4</code> <code>A9AFEFA7ED818C7703A088743D161F17</code> <code>63D36D477ED5169FEEC8D27C962B7EDB</code> <code>EDD401B9A2DAA8EBF15F6BC38F9309DE</code> <code>DE834FBE83CCB98CA4DAD057955EF700</code> <code>87D116867947F18F3D29C506767E3CF6</code> <code>9FBE93F046DC1E74DAFACCB1107CF513</code> <code>D5743691304186E02F78E5D1ECD706DB</code><br> <code>73B47D47</code></td>
<td><code>g_a</code> diffie-hellman parameter</td>
</tr>
<tr>
<td>server_time</td>
<td>560, 4</td>
<td><code>4DC4AB66</code> (1722532941 in decimal)</td>
<td><code>EFD1AB66</code> (1722536431 in decimal)</td>
<td>Server time</td>
</tr>
</tbody>
@ -609,34 +609,34 @@ answer = BA0D89B558C9B564FE4636F6F8CEB11D463151104C0FDAE0DE9FD67039C06C9026E6974
<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 = 1B0468E9DBFD20FA417DC3EED2530442F422AA4D0FC9D52301E2612107704BE66AB33DA9B750ECD9F33013F1415EF785DABFEC1E629C29743FBBEB3A4A07890F9678F0A8EAF058676F9BF4F92AA794D20AF995E467349C65A620E8C2C128098F6946A057F25318C086F5337AC87A1653C10B590C15027F512184308C15EB02631FC93087CDE647A213E155D832E6D5CF8EB6F2A4655CADA89553358951F13141050AC29707F0827DA0160B22815DE89FBD72E3514E5E47DF092C5DA3820DC1E5B48EFA92BBB2FFE983354B07C6CA2DC0CE8973BBF248995161C72F042C62A69F43939EDCDFDBCE0AB7EC3D7BDF5F615971883A07820DA27B60D1BFD8EFDBC5B0</code></pre>
<pre><code>b = 808F0FDDC44293310A8EFD86865897444125D8B6816BF67EF341D6A3E8ACBFD8A0FD7662420693A302DB9ECCF5E4BB58B3932D17F96205DDF6EA156A4A4B34A8BC0006CD1D74246D98737D4C56943E4C39A913428B77C36A83E60D066B5DF210898E3BEC2BC61F589F8EE3DEA4D78F946AF82CD31EC2BD30C93A4CC2BB1692973C457E1B6CD8FD88A5520EBA3F824A95F2BB8306D04E68EA6367F9B5B8C79668AC6D4DACEA1A72E547DF82AF3A56DBF909DD39F2DFEB8C35E5548E36CF6F2AA2CF06D8FE3CAECC116F88CED3CC579D36933F0929868773C9F65069F2A7CA572ECA235AEB85718F85B3932601C000DA34BB368CAB19FF037D6CA5C04A192F0803</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 = B1BEE9D5FF26ABF161D8D71E018AE01DAA8E1C2CEBB7CEE55ECFDD5E07E4137D228A838D10205EF295903B0E4D3066D5DFA19AC83E218BAD49B7573428FD2D835E83203B55D94CCC018B69BD82F1F897D88CBBD71C8B74BF081B3533BB175BBFC2EAFA02BF3555ACCADCFD2D62F35118666FD76A13AEBCD6DB5DF0115C2AF7E630527A861A5C0EFA32D7F72128EA338EA335B1DF2D0CC44B4CD7C098BD855CC53F16FAD1E6C45647B80F0743EA9265C7823698D17AB18AF4C0B49B26F2AE96EB24F48181358222D2C0CD9895CB5E935DC643574F2297234309901E30AE3677C455AB540D9C10961118F89B30DBD2FB1D1A0BF833136A14C8BD902855344AF7FA</code></pre>
<pre><code>g_b = B982A4EE5651A3D9A89206A26D28E08A07F7529477807FAA173FA522AC48038C4C3C4249B2ECDE0FE5131B3CDDBBE463231F2DDC11F70163D26F6F0250755D8EA379E891461E0F46FC972953C5CD1FE1B9EF537DB4F20D45A3DB97D7AAC28769CAE1E870738B3826EF15B79582B9E65D99C83D63015A415DDC0D4666BD60A09345E4EB44427BCFBB5C5AD16373261C9777F7283728EFA9D34710ADB6F84E12AF4AA5D2294639ECFF9185F5F20CC3BB9B8D986C846B0AE35A165D380A09710793675C93442889CF9D80B0BCC8B935014314508582DC919A901F7773BACE2958832657733DE1E52B2D583D45B88D0B18DA501FF07449BA89C89D3BF1F1B714FB92</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 58 C9 B5 64 FE 46 36 F6 F8 CE B1 1D
0010 | 46 31 51 10 4C 0F DA E0 DE 9F D6 70 39 C0 6C 90
0020 | 26 E6 97 42 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | B1 BE E9 D5 FF 26 AB F1 61 D8 D7 1E 01 8A E0 1D
0040 | AA 8E 1C 2C EB B7 CE E5 5E CF DD 5E 07 E4 13 7D
0050 | 22 8A 83 8D 10 20 5E F2 95 90 3B 0E 4D 30 66 D5
0060 | DF A1 9A C8 3E 21 8B AD 49 B7 57 34 28 FD 2D 83
0070 | 5E 83 20 3B 55 D9 4C CC 01 8B 69 BD 82 F1 F8 97
0080 | D8 8C BB D7 1C 8B 74 BF 08 1B 35 33 BB 17 5B BF
0090 | C2 EA FA 02 BF 35 55 AC CA DC FD 2D 62 F3 51 18
00A0 | 66 6F D7 6A 13 AE BC D6 DB 5D F0 11 5C 2A F7 E6
00B0 | 30 52 7A 86 1A 5C 0E FA 32 D7 F7 21 28 EA 33 8E
00C0 | A3 35 B1 DF 2D 0C C4 4B 4C D7 C0 98 BD 85 5C C5
00D0 | 3F 16 FA D1 E6 C4 56 47 B8 0F 07 43 EA 92 65 C7
00E0 | 82 36 98 D1 7A B1 8A F4 C0 B4 9B 26 F2 AE 96 EB
00F0 | 24 F4 81 81 35 82 22 D2 C0 CD 98 95 CB 5E 93 5D
0100 | C6 43 57 4F 22 97 23 43 09 90 1E 30 AE 36 77 C4
0110 | 55 AB 54 0D 9C 10 96 11 18 F8 9B 30 DB D2 FB 1D
0120 | 1A 0B F8 33 13 6A 14 C8 BD 90 28 55 34 4A F7 FA</code></pre>
<pre><code>0000 | 54 B6 43 66 7B BD B9 63 BC 64 29 17 87 F3 B0 F1
0010 | 57 90 DF BE 81 22 DC 5E 6A 4C 66 E0 03 B4 CC 48
0020 | F1 5B 2A 28 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | B9 82 A4 EE 56 51 A3 D9 A8 92 06 A2 6D 28 E0 8A
0040 | 07 F7 52 94 77 80 7F AA 17 3F A5 22 AC 48 03 8C
0050 | 4C 3C 42 49 B2 EC DE 0F E5 13 1B 3C DD BB E4 63
0060 | 23 1F 2D DC 11 F7 01 63 D2 6F 6F 02 50 75 5D 8E
0070 | A3 79 E8 91 46 1E 0F 46 FC 97 29 53 C5 CD 1F E1
0080 | B9 EF 53 7D B4 F2 0D 45 A3 DB 97 D7 AA C2 87 69
0090 | CA E1 E8 70 73 8B 38 26 EF 15 B7 95 82 B9 E6 5D
00A0 | 99 C8 3D 63 01 5A 41 5D DC 0D 46 66 BD 60 A0 93
00B0 | 45 E4 EB 44 42 7B CF BB 5C 5A D1 63 73 26 1C 97
00C0 | 77 F7 28 37 28 EF A9 D3 47 10 AD B6 F8 4E 12 AF
00D0 | 4A A5 D2 29 46 39 EC FF 91 85 F5 F2 0C C3 BB 9B
00E0 | 8D 98 6C 84 6B 0A E3 5A 16 5D 38 0A 09 71 07 93
00F0 | 67 5C 93 44 28 89 CF 9D 80 B0 BC C8 B9 35 01 43
0100 | 14 50 85 82 DC 91 9A 90 1F 77 73 BA CE 29 58 83
0110 | 26 57 73 3D E1 E5 2B 2D 58 3D 45 B8 8D 0B 18 DA
0120 | 50 1F F0 74 49 BA 89 C8 9D 3B F1 F1 B7 14 FB 92</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 = BA0D89B558C9B564FE4636F6F8CEB11D463151104C0FDAE0DE9FD67039C06C9026E6974
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>58C9B564FE4636F6F8CEB11D46315110</code></td>
<td><code>7BBDB963BC64291787F3B0F15790DFBE</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>4C0FDAE0DE9FD67039C06C9026E69742</code></td>
<td><code>8122DC5E6A4C66E003B4CC48F15B2A28</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>g_b</td>
<td>36, 260</td>
<td><code>FE000100B1BEE9D5FF26ABF161D8D71E</code> <code>018AE01DAA8E1C2CEBB7CEE55ECFDD5E</code> <code>07E4137D228A838D10205EF295903B0E</code> <code>4D3066D5DFA19AC83E218BAD49B75734</code> <code>28FD2D835E83203B55D94CCC018B69BD</code> <code>82F1F897D88CBBD71C8B74BF081B3533</code> <code>BB175BBFC2EAFA02BF3555ACCADCFD2D</code> <code>62F35118666FD76A13AEBCD6DB5DF011</code> <code>5C2AF7E630527A861A5C0EFA32D7F721</code> <code>28EA338EA335B1DF2D0CC44B4CD7C098</code> <code>BD855CC53F16FAD1E6C45647B80F0743</code> <code>EA9265C7823698D17AB18AF4C0B49B26</code> <code>F2AE96EB24F48181358222D2C0CD9895</code> <code>CB5E935DC643574F2297234309901E30</code> <code>AE3677C455AB540D9C10961118F89B30</code> <code>DBD2FB1D1A0BF833136A14C8BD902855</code><br> <code>344AF7FA</code></td>
<td><code>FE000100B982A4EE5651A3D9A89206A2</code> <code>6D28E08A07F7529477807FAA173FA522</code> <code>AC48038C4C3C4249B2ECDE0FE5131B3C</code> <code>DDBBE463231F2DDC11F70163D26F6F02</code> <code>50755D8EA379E891461E0F46FC972953</code> <code>C5CD1FE1B9EF537DB4F20D45A3DB97D7</code> <code>AAC28769CAE1E870738B3826EF15B795</code> <code>82B9E65D99C83D63015A415DDC0D4666</code> <code>BD60A09345E4EB44427BCFBB5C5AD163</code> <code>73261C9777F7283728EFA9D34710ADB6</code> <code>F84E12AF4AA5D2294639ECFF9185F5F2</code> <code>0CC3BB9B8D986C846B0AE35A165D380A</code> <code>09710793675C93442889CF9D80B0BCC8</code> <code>B935014314508582DC919A901F7773BA</code> <code>CE2958832657733DE1E52B2D583D45B8</code> <code>8D0B18DA501FF07449BA89C89D3BF1F1</code><br> <code>B714FB92</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 = BA0D89B558C9B564FE4636F6F8CEB11D463151104C0FDAE0DE9FD67039C06C9026E6974
<!-- 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 = 54B6436658C9B564FE4636F6F8CEB11D463151104C0FDAE0DE9FD67039C06C9026E697420000000000000000FE000100B1BEE9D5FF26ABF161D8D71E018AE01DAA8E1C2CEBB7CEE55ECFDD5E07E4137D228A838D10205EF295903B0E4D3066D5DFA19AC83E218BAD49B7573428FD2D835E83203B55D94CCC018B69BD82F1F897D88CBBD71C8B74BF081B3533BB175BBFC2EAFA02BF3555ACCADCFD2D62F35118666FD76A13AEBCD6DB5DF0115C2AF7E630527A861A5C0EFA32D7F72128EA338EA335B1DF2D0CC44B4CD7C098BD855CC53F16FAD1E6C45647B80F0743EA9265C7823698D17AB18AF4C0B49B26F2AE96EB24F48181358222D2C0CD9895CB5E935DC643574F2297234309901E30AE3677C455AB540D9C10961118F89B30DBD2FB1D1A0BF833136A14C8BD902855344AF7FA
padding = A76B7CAA8F1952F7D2B6E3AB
tmp_aes_key = F3703B4E69009BC24510144B929AE5883CA088B12CF5A5E7354327A7701325D9
tmp_aes_iv = 8ABE130C3F744CD23D434583B7C96C2E7CBE25DB058A0776C6BCFC77379E6BBA</code></pre>
<pre><code>data = 54B643667BBDB963BC64291787F3B0F15790DFBE8122DC5E6A4C66E003B4CC48F15B2A280000000000000000FE000100B982A4EE5651A3D9A89206A26D28E08A07F7529477807FAA173FA522AC48038C4C3C4249B2ECDE0FE5131B3CDDBBE463231F2DDC11F70163D26F6F0250755D8EA379E891461E0F46FC972953C5CD1FE1B9EF537DB4F20D45A3DB97D7AAC28769CAE1E870738B3826EF15B79582B9E65D99C83D63015A415DDC0D4666BD60A09345E4EB44427BCFBB5C5AD16373261C9777F7283728EFA9D34710ADB6F84E12AF4AA5D2294639ECFF9185F5F20CC3BB9B8D986C846B0AE35A165D380A09710793675C93442889CF9D80B0BCC8B935014314508582DC919A901F7773BACE2958832657733DE1E52B2D583D45B88D0B18DA501FF07449BA89C89D3BF1F1B714FB92
padding = 01339CF33DF07B0415CA0AF0
tmp_aes_key = BC92457F9E912DECD5B954A07A9DD04A42A4307A27197EF5F71FC63B3FC76AF3
tmp_aes_iv = 1F7F8549D862AD8EE1FDB95D320AF75C01C8F5BE794F8940628DF95C3216B1CE</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 = A5B9ABF2708B9F068EF2899C106568C401C8C45BF8F9E11E0FB85487290BB30F30AE17C9401C41A7A200C786622F76F18D822F649589C4CDC72104F64C9CBA88FD023A1E378AB7EECD41197724DF0DD42A03CB6B0AFF387C6A5E14091A2DD7AE68A8E82118E9F1B58610263EA72C8DA791C63447FA2BB18CE516B9C38D346F59AF5603B970313FCBD958D90475685B315F6736FD4816455A137A966F5FA59B1EAAFB9063CBA46371D3FCD69F43E3D8A7C759C1D0317FA38DE9C321A7F8AF97354FDB9AAE0D4E86F5814E7451CFAB057C92749D3DDEDCFC7C0B317C2BFFF52ACCB48BBD82FD1AB61903286004F8143B0520967E209D211B7AE070E7CBCC78BF250F5E477476AAAB282F1366C6E3B5B8AC58B3FC514D89EA41296F2D9E5B9C879D5C3FD1B2E2BFB9A518BC5514D36104AAA8E8B609E63F48F92242ECE9286ED5F1F37A77527490671612949BBF3C3A117C</code></pre>
<pre><code>encrypted_data = 691DA68B16068B04243E3058B9068C958CE7519E984739BCBD42C56DA9C698D8388FB786067BCF7D48C169E9CAAD8C55E5D6CEBB616B60994B2AD08E5089E554BB85B3490EE56733907D12116969EA3703B0F430A9B5779421E55066E3B7C1485A1D1EDF4261743091855B88E6914FE7612F668EB8B4B81EF7A483E266856824F1C4E97BB9D2779A70AA9BC554F37C6E7FBBA0B2CAEF8DDB3D8CC876E076A245C35B1FCE10E939E7595A86AAB6D7A2B321892374A98C050D5B38BEB526713BA12638549DE65BFFF205E15171BA6F0671598A0BCE281A6632143F36CCE082BC132E147100B8C5D9804E5834F66B8CDDB8810D29322F5531D0C3B52E9B3B1F4FD359772B0FFA245D9558A695FBB1845ED4ACF4D3466F1AE380FAC3EEB840B5C9B19A8A5F23A47BF4814BEBF35CAA6ED22F589255237DD372A01268460E00A43F8722F0ED02A4EF00E4F0C7D90A4B66AB67</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 A4 8B 06 00 4D C4 AB 66
0010 | 78 01 00 00 1F 5F 04 F5 58 C9 B5 64 FE 46 36 F6
0020 | F8 CE B1 1D 46 31 51 10 4C 0F DA E0 DE 9F D6 70
0030 | 39 C0 6C 90 26 E6 97 42 FE 50 01 00 A5 B9 AB F2
0040 | 70 8B 9F 06 8E F2 89 9C 10 65 68 C4 01 C8 C4 5B
0050 | F8 F9 E1 1E 0F B8 54 87 29 0B B3 0F 30 AE 17 C9
0060 | 40 1C 41 A7 A2 00 C7 86 62 2F 76 F1 8D 82 2F 64
0070 | 95 89 C4 CD C7 21 04 F6 4C 9C BA 88 FD 02 3A 1E
0080 | 37 8A B7 EE CD 41 19 77 24 DF 0D D4 2A 03 CB 6B
0090 | 0A FF 38 7C 6A 5E 14 09 1A 2D D7 AE 68 A8 E8 21
00A0 | 18 E9 F1 B5 86 10 26 3E A7 2C 8D A7 91 C6 34 47
00B0 | FA 2B B1 8C E5 16 B9 C3 8D 34 6F 59 AF 56 03 B9
00C0 | 70 31 3F CB D9 58 D9 04 75 68 5B 31 5F 67 36 FD
00D0 | 48 16 45 5A 13 7A 96 6F 5F A5 9B 1E AA FB 90 63
00E0 | CB A4 63 71 D3 FC D6 9F 43 E3 D8 A7 C7 59 C1 D0
00F0 | 31 7F A3 8D E9 C3 21 A7 F8 AF 97 35 4F DB 9A AE
0100 | 0D 4E 86 F5 81 4E 74 51 CF AB 05 7C 92 74 9D 3D
0110 | DE DC FC 7C 0B 31 7C 2B FF F5 2A CC B4 8B BD 82
0120 | FD 1A B6 19 03 28 60 04 F8 14 3B 05 20 96 7E 20
0130 | 9D 21 1B 7A E0 70 E7 CB CC 78 BF 25 0F 5E 47 74
0140 | 76 AA AB 28 2F 13 66 C6 E3 B5 B8 AC 58 B3 FC 51
0150 | 4D 89 EA 41 29 6F 2D 9E 5B 9C 87 9D 5C 3F D1 B2
0160 | E2 BF B9 A5 18 BC 55 14 D3 61 04 AA A8 E8 B6 09
0170 | E6 3F 48 F9 22 42 EC E9 28 6E D5 F1 F3 7A 77 52
0180 | 74 90 67 16 12 94 9B BF 3C 3A 11 7C</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 30 A8 0B 00 EF D1 AB 66
0010 | 78 01 00 00 1F 5F 04 F5 7B BD B9 63 BC 64 29 17
0020 | 87 F3 B0 F1 57 90 DF BE 81 22 DC 5E 6A 4C 66 E0
0030 | 03 B4 CC 48 F1 5B 2A 28 FE 50 01 00 69 1D A6 8B
0040 | 16 06 8B 04 24 3E 30 58 B9 06 8C 95 8C E7 51 9E
0050 | 98 47 39 BC BD 42 C5 6D A9 C6 98 D8 38 8F B7 86
0060 | 06 7B CF 7D 48 C1 69 E9 CA AD 8C 55 E5 D6 CE BB
0070 | 61 6B 60 99 4B 2A D0 8E 50 89 E5 54 BB 85 B3 49
0080 | 0E E5 67 33 90 7D 12 11 69 69 EA 37 03 B0 F4 30
0090 | A9 B5 77 94 21 E5 50 66 E3 B7 C1 48 5A 1D 1E DF
00A0 | 42 61 74 30 91 85 5B 88 E6 91 4F E7 61 2F 66 8E
00B0 | B8 B4 B8 1E F7 A4 83 E2 66 85 68 24 F1 C4 E9 7B
00C0 | B9 D2 77 9A 70 AA 9B C5 54 F3 7C 6E 7F BB A0 B2
00D0 | CA EF 8D DB 3D 8C C8 76 E0 76 A2 45 C3 5B 1F CE
00E0 | 10 E9 39 E7 59 5A 86 AA B6 D7 A2 B3 21 89 23 74
00F0 | A9 8C 05 0D 5B 38 BE B5 26 71 3B A1 26 38 54 9D
0100 | E6 5B FF F2 05 E1 51 71 BA 6F 06 71 59 8A 0B CE
0110 | 28 1A 66 32 14 3F 36 CC E0 82 BC 13 2E 14 71 00
0120 | B8 C5 D9 80 4E 58 34 F6 6B 8C DD B8 81 0D 29 32
0130 | 2F 55 31 D0 C3 B5 2E 9B 3B 1F 4F D3 59 77 2B 0F
0140 | FA 24 5D 95 58 A6 95 FB B1 84 5E D4 AC F4 D3 46
0150 | 6F 1A E3 80 FA C3 EE B8 40 B5 C9 B1 9A 8A 5F 23
0160 | A4 7B F4 81 4B EB F3 5C AA 6E D2 2F 58 92 55 23
0170 | 7D D3 72 A0 12 68 46 0E 00 A4 3F 87 22 F0 ED 02
0180 | A4 EF 00 E4 F0 C7 D9 0A 4B 66 AB 67</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>A48B06004DC4AB66</code></td>
<td><code>30A80B00EFD1AB66</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>58C9B564FE4636F6F8CEB11D46315110</code></td>
<td><code>7BBDB963BC64291787F3B0F15790DFBE</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>4C0FDAE0DE9FD67039C06C9026E69742</code></td>
<td><code>8122DC5E6A4C66E003B4CC48F15B2A28</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_data</td>
<td>56, 340</td>
<td><code>FE500100A5B9ABF2708B9F068EF2899C</code> <code>106568C401C8C45BF8F9E11E0FB85487</code> <code>290BB30F30AE17C9401C41A7A200C786</code> <code>622F76F18D822F649589C4CDC72104F6</code> <code>4C9CBA88FD023A1E378AB7EECD411977</code> <code>24DF0DD42A03CB6B0AFF387C6A5E1409</code> <code>1A2DD7AE68A8E82118E9F1B58610263E</code> <code>A72C8DA791C63447FA2BB18CE516B9C3</code> <code>8D346F59AF5603B970313FCBD958D904</code> <code>75685B315F6736FD4816455A137A966F</code> <code>5FA59B1EAAFB9063CBA46371D3FCD69F</code> <code>43E3D8A7C759C1D0317FA38DE9C321A7</code> <code>F8AF97354FDB9AAE0D4E86F5814E7451</code> <code>CFAB057C92749D3DDEDCFC7C0B317C2B</code> <code>FFF52ACCB48BBD82FD1AB61903286004</code> <code>F8143B0520967E209D211B7AE070E7CB</code> <code>CC78BF250F5E477476AAAB282F1366C6</code> <code>E3B5B8AC58B3FC514D89EA41296F2D9E</code> <code>5B9C879D5C3FD1B2E2BFB9A518BC5514</code> <code>D36104AAA8E8B609E63F48F92242ECE9</code> <code>286ED5F1F37A77527490671612949BBF</code><br> <code>3C3A117C</code></td>
<td><code>FE500100691DA68B16068B04243E3058</code> <code>B9068C958CE7519E984739BCBD42C56D</code> <code>A9C698D8388FB786067BCF7D48C169E9</code> <code>CAAD8C55E5D6CEBB616B60994B2AD08E</code> <code>5089E554BB85B3490EE56733907D1211</code> <code>6969EA3703B0F430A9B5779421E55066</code> <code>E3B7C1485A1D1EDF4261743091855B88</code> <code>E6914FE7612F668EB8B4B81EF7A483E2</code> <code>66856824F1C4E97BB9D2779A70AA9BC5</code> <code>54F37C6E7FBBA0B2CAEF8DDB3D8CC876</code> <code>E076A245C35B1FCE10E939E7595A86AA</code> <code>B6D7A2B321892374A98C050D5B38BEB5</code> <code>26713BA12638549DE65BFFF205E15171</code> <code>BA6F0671598A0BCE281A6632143F36CC</code> <code>E082BC132E147100B8C5D9804E5834F6</code> <code>6B8CDDB8810D29322F5531D0C3B52E9B</code> <code>3B1F4FD359772B0FFA245D9558A695FB</code> <code>B1845ED4ACF4D3466F1AE380FAC3EEB8</code> <code>40B5C9B19A8A5F23A47BF4814BEBF35C</code> <code>AA6ED22F589255237DD372A01268460E</code> <code>00A43F8722F0ED02A4EF00E4F0C7D90A</code><br> <code>4B66AB67</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 = 9D630863AF022C4751DABDA2ACC4E69778BCC54C6BD4CA7FED1D7FF12FC07C10794132D22BA40B5DB885309956F49F1A73CB566C37B8796FB267E693B033114CF40ADDB2D0C07677ABBEFA69DF5FFC2EBF8831E109C8A1C8BF842A00AA478E8AAE0AE215C65FEBAEAFF2F61AE4E47902E9E8BF01783E2487F51EDC97596733A8A8F6DB232B852B431432B47B46B004F77D5020EF7C856E5FED1A8BF123C89E192E7DA0C7FDC9BD83B9CB66E701B63A1F2606C8ACE025080B5E3EBF87CD1B686E2C7621C11E56A9CE6D05A4A24C5DDB0E8B5EA1D6422AB9F7FBD6C3669A0B6C800423C8960235DCC055670F13B018EC15B9901040ED2F1BF8A2313EB752640F6B</code></pre>
<pre><code>auth_key = 8E66A556449F787E1094A7BB8EDD4033D7A768E2AC4F703A7ACB979A11DEC3A1E7659097A725C390382063508757F68B0B53F7D63C3F67FDDC0CD44EC5FF54A972E91012C0A3A67E1614B9257EA726F9B180371F5A5FCF8BB7D8E9362DA7BF3E5FFE97E2888C9481C48A0298B0B56667AE4541E13743C7B204A5C1A4FFF525D8020EAC7E10854699219789C5B6190575D8E8AAB17D46D89C33BD155F63D0401080BB40F7142A1FB43C8B72194B86F2647429C6ED252740E5864C2881A9EEE6CCEEF59E8187055D368544FA337FD286245634AE5793B18BB6BD110B713E16466725D2D30D6B276BD56F5204D553FAE183FD9913ECB2692B43AF8185AA4BAFAD79</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 F4 AC AC 4D C4 AB 66
0010 | 8C 00 00 00 34 F7 CB 3B 58 C9 B5 64 FE 46 36 F6
0020 | F8 CE B1 1D 46 31 51 10 4C 0F DA E0 DE 9F D6 70
0030 | 39 C0 6C 90 26 E6 97 42 A6 D6 8B 51 FC A0 0A 4B
0040 | 48 D1 75 BD CD 3E A0 D8</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 D0 BD 89 F0 D1 AB 66
0010 | A4 00 00 00 34 F7 CB 3B 7B BD B9 63 BC 64 29 17
0020 | 87 F3 B0 F1 57 90 DF BE 81 22 DC 5E 6A 4C 66 E0
0030 | 03 B4 CC 48 F1 5B 2A 28 B7 9C 1E DF 47 90 36 EF
0040 | 02 95 F5 CF 99 FC 45 F3</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>01F4ACAC4DC4AB66</code></td>
<td><code>01D0BD89F0D1AB66</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>8C000000</code> (140 in decimal)</td>
<td><code>A4000000</code> (164 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>58C9B564FE4636F6F8CEB11D46315110</code></td>
<td><code>7BBDB963BC64291787F3B0F15790DFBE</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>4C0FDAE0DE9FD67039C06C9026E69742</code></td>
<td><code>8122DC5E6A4C66E003B4CC48F15B2A28</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce_hash1</td>
<td>56, 16</td>
<td><code>A6D68B51FCA00A4B48D175BDCD3EA0D8</code></td>
<td><code>B79C1EDF479036EF0295F5CF99FC45F3</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>