mirror of
https://github.com/MarshalX/telegram-crawler.git
synced 2025-01-08 11:34:08 +01:00
Update content of files
This commit is contained in:
parent
687b1d2199
commit
092a5561b6
7 changed files with 225 additions and 216 deletions
|
@ -130,7 +130,10 @@ Use <a href="/method/messages.deleteExportedChatInvite">messages.deleteExportedC
|
||||||
<a href='/method/payments.fulfillStarsSubscription'>payments.fulfillStarsSubscription</a>#cc5bebb3 peer:<a href='/type/InputPeer'>InputPeer</a> subscription_id:<a href='/type/string'>string</a> = <a href='/type/Bool'>Bool</a>;
|
<a href='/method/payments.fulfillStarsSubscription'>payments.fulfillStarsSubscription</a>#cc5bebb3 peer:<a href='/type/InputPeer'>InputPeer</a> subscription_id:<a href='/type/string'>string</a> = <a href='/type/Bool'>Bool</a>;
|
||||||
|
|
||||||
<a href='/method/payments.getStarsSubscriptions'>payments.getStarsSubscriptions</a>#032512c5 flags:<a href='/type/%23'>#</a> missing_balance:flags.0?<a href='/constructor/true'>true</a> peer:<a href='/type/InputPeer'>InputPeer</a> offset:<a href='/type/string'>string</a> = <a href='/type/payments.StarsStatus'>payments.StarsStatus</a>;
|
<a href='/method/payments.getStarsSubscriptions'>payments.getStarsSubscriptions</a>#032512c5 flags:<a href='/type/%23'>#</a> missing_balance:flags.0?<a href='/constructor/true'>true</a> peer:<a href='/type/InputPeer'>InputPeer</a> offset:<a href='/type/string'>string</a> = <a href='/type/payments.StarsStatus'>payments.StarsStatus</a>;
|
||||||
<a href='/method/payments.changeStarsSubscription'>payments.changeStarsSubscription</a>#c7770878 flags:<a href='/type/%23'>#</a> peer:<a href='/type/InputPeer'>InputPeer</a> subscription_id:<a href='/type/string'>string</a> canceled:flags.0?<a href='/type/Bool'>Bool</a> = <a href='/type/Bool'>Bool</a>;</code></pre>
|
<a href='/method/payments.changeStarsSubscription'>payments.changeStarsSubscription</a>#c7770878 flags:<a href='/type/%23'>#</a> peer:<a href='/type/InputPeer'>InputPeer</a> subscription_id:<a href='/type/string'>string</a> canceled:flags.0?<a href='/type/Bool'>Bool</a> = <a href='/type/Bool'>Bool</a>;
|
||||||
|
<a href='/method/payments.getStarsTransactions'>payments.getStarsTransactions</a>#69da4557 flags:<a href='/type/%23'>#</a> inbound:flags.0?<a href='/constructor/true'>true</a> outbound:flags.1?<a href='/constructor/true'>true</a> ascending:flags.2?<a href='/constructor/true'>true</a> subscription_id:flags.3?<a href='/type/string'>string</a> peer:<a href='/type/InputPeer'>InputPeer</a> offset:<a href='/type/string'>string</a> limit:<a href='/type/int'>int</a> = <a href='/type/payments.StarsStatus'>payments.StarsStatus</a>;
|
||||||
|
|
||||||
|
<a href='/method/messages.getChatInviteImporters'>messages.getChatInviteImporters</a>#df04dd4e flags:<a href='/type/%23'>#</a> requested:flags.0?<a href='/constructor/true'>true</a> subscription_expired:flags.3?<a href='/constructor/true'>true</a> peer:<a href='/type/InputPeer'>InputPeer</a> link:flags.1?<a href='/type/string'>string</a> q:flags.2?<a href='/type/string'>string</a> offset_date:<a href='/type/int'>int</a> offset_user:<a href='/type/InputUser'>InputUser</a> limit:<a href='/type/int'>int</a> = <a href='/type/messages.ChatInviteImporters'>messages.ChatInviteImporters</a>;</code></pre>
|
||||||
<p>Channel administrators can create special invite links that allow joining a channel in exchange for a monthly payment in Telegram Stars. </p>
|
<p>Channel administrators can create special invite links that allow joining a channel in exchange for a monthly payment in Telegram Stars. </p>
|
||||||
<p>To create such links, invoke <a href="/method/messages.exportChatInvite">messages.exportChatInvite</a> passing a <a href="/constructor/starsSubscriptionPricing">starsSubscriptionPricing</a> constructor to <code>subscription_pricing</code>, passing in <code>peer</code> the <strong>private channel</strong> we wish to sell access to, and in <code>amount</code> the amount of Telegram Stars users should pay every <code>period</code> seconds to gain and maintain access to the channel.<br>
|
<p>To create such links, invoke <a href="/method/messages.exportChatInvite">messages.exportChatInvite</a> passing a <a href="/constructor/starsSubscriptionPricing">starsSubscriptionPricing</a> constructor to <code>subscription_pricing</code>, passing in <code>peer</code> the <strong>private channel</strong> we wish to sell access to, and in <code>amount</code> the amount of Telegram Stars users should pay every <code>period</code> seconds to gain and maintain access to the channel.<br>
|
||||||
Currently the only allowed subscription period is <code>30*24*60*60</code>, i.e. the user will be debited <code>amount</code> stars every month. </p>
|
Currently the only allowed subscription period is <code>30*24*60*60</code>, i.e. the user will be debited <code>amount</code> stars every month. </p>
|
||||||
|
@ -142,6 +145,8 @@ Currently the only allowed subscription period is <code>30*24*60*60</code>, i.e.
|
||||||
<p>To obtain a list of all active and cancelled subscriptions invoke <a href="/method/payments.getStarsSubscriptions">payments.getStarsSubscriptions</a>, passing <a href="/constructor/inputPeerSelf">inputPeerSelf</a> to <code>peer</code>: this will return a vector of <a href="/constructor/starsSubscription">starsSubscription</a> constructors, containing info about each subscription. </p>
|
<p>To obtain a list of all active and cancelled subscriptions invoke <a href="/method/payments.getStarsSubscriptions">payments.getStarsSubscriptions</a>, passing <a href="/constructor/inputPeerSelf">inputPeerSelf</a> to <code>peer</code>: this will return a vector of <a href="/constructor/starsSubscription">starsSubscription</a> constructors, containing info about each subscription. </p>
|
||||||
<p>To cancel an active subscription, invoke <a href="/method/payments.changeStarsSubscription">payments.changeStarsSubscription</a> passing <a href="/constructor/inputPeerSelf">inputPeerSelf</a> to <code>peer</code>, the <a href="/constructor/starsSubscription">starsSubscription</a>.<code>id</code> to <code>subscription_id</code> and <a href="/constructor/boolTrue">boolTrue</a> to <code>canceled</code>; to resubscribe, invoke the same method passing <a href="/constructor/boolFalse">boolFalse</a> to <code>canceled</code>. </p>
|
<p>To cancel an active subscription, invoke <a href="/method/payments.changeStarsSubscription">payments.changeStarsSubscription</a> passing <a href="/constructor/inputPeerSelf">inputPeerSelf</a> to <code>peer</code>, the <a href="/constructor/starsSubscription">starsSubscription</a>.<code>id</code> to <code>subscription_id</code> and <a href="/constructor/boolTrue">boolTrue</a> to <code>canceled</code>; to resubscribe, invoke the same method passing <a href="/constructor/boolFalse">boolFalse</a> to <code>canceled</code>. </p>
|
||||||
<p>When we get close to the end of the subscription period of one or more active subscriptions, and the current Telegram Star balance is not high enough to autorenew at least one of them, the <a href="/api/config#suggestions">"STARS_SUBSCRIPTION_LOW_BALANCE" suggestion »</a> will be activated: when the user clicks on the suggestion, the client should fetch and display the list of expiring subscriptions by invoking <a href="/method/payments.getStarsSubscriptions">payments.getStarsSubscriptions</a>, passing <a href="/constructor/inputPeerSelf">inputPeerSelf</a> to <code>peer</code> and setting the <code>missing_balance</code> flag: the returned subscriptions may be renewed by <a href="/api/stars">filling up the current Telegram Star balance</a> with at least <a href="/constructor/payments.starsStatus">payments.starsStatus</a>.<code>subscriptions_missing_balance</code> stars.</p>
|
<p>When we get close to the end of the subscription period of one or more active subscriptions, and the current Telegram Star balance is not high enough to autorenew at least one of them, the <a href="/api/config#suggestions">"STARS_SUBSCRIPTION_LOW_BALANCE" suggestion »</a> will be activated: when the user clicks on the suggestion, the client should fetch and display the list of expiring subscriptions by invoking <a href="/method/payments.getStarsSubscriptions">payments.getStarsSubscriptions</a>, passing <a href="/constructor/inputPeerSelf">inputPeerSelf</a> to <code>peer</code> and setting the <code>missing_balance</code> flag: the returned subscriptions may be renewed by <a href="/api/stars">filling up the current Telegram Star balance</a> with at least <a href="/constructor/payments.starsStatus">payments.starsStatus</a>.<code>subscriptions_missing_balance</code> stars.</p>
|
||||||
|
<p><a href="/method/payments.getStarsTransactions">payments.getStarsTransactions</a> may be used to fetch only and all transactions for a specific subscription by populating the <code>subscription_id</code> flag. </p>
|
||||||
|
<p>Admins may also use <a href="/method/messages.getChatInviteImporters">messages.getChatInviteImporters</a> with the <code>subscription_expired</code> flag set to fetch only and all users with an expired subscription. </p>
|
||||||
<h3><a class="anchor" href="#join-requests" id="join-requests" name="join-requests"><i class="anchor-icon"></i></a>Join requests</h3>
|
<h3><a class="anchor" href="#join-requests" id="join-requests" name="join-requests"><i class="anchor-icon"></i></a>Join requests</h3>
|
||||||
<pre><code><a href='/constructor/channel'>channel</a>#fe4478bd flags:<a href='/type/%23'>#</a> creator:flags.0?<a href='/constructor/true'>true</a> left:flags.2?<a href='/constructor/true'>true</a> broadcast:flags.5?<a href='/constructor/true'>true</a> verified:flags.7?<a href='/constructor/true'>true</a> megagroup:flags.8?<a href='/constructor/true'>true</a> restricted:flags.9?<a href='/constructor/true'>true</a> signatures:flags.11?<a href='/constructor/true'>true</a> min:flags.12?<a href='/constructor/true'>true</a> scam:flags.19?<a href='/constructor/true'>true</a> has_link:flags.20?<a href='/constructor/true'>true</a> has_geo:flags.21?<a href='/constructor/true'>true</a> slowmode_enabled:flags.22?<a href='/constructor/true'>true</a> call_active:flags.23?<a href='/constructor/true'>true</a> call_not_empty:flags.24?<a href='/constructor/true'>true</a> fake:flags.25?<a href='/constructor/true'>true</a> gigagroup:flags.26?<a href='/constructor/true'>true</a> noforwards:flags.27?<a href='/constructor/true'>true</a> join_to_send:flags.28?<a href='/constructor/true'>true</a> join_request:flags.29?<a href='/constructor/true'>true</a> forum:flags.30?<a href='/constructor/true'>true</a> flags2:<a href='/type/%23'>#</a> stories_hidden:flags2.1?<a href='/constructor/true'>true</a> stories_hidden_min:flags2.2?<a href='/constructor/true'>true</a> stories_unavailable:flags2.3?<a href='/constructor/true'>true</a> signature_profiles:flags2.12?<a href='/constructor/true'>true</a> id:<a href='/type/long'>long</a> access_hash:flags.13?<a href='/type/long'>long</a> title:<a href='/type/string'>string</a> username:flags.6?<a href='/type/string'>string</a> photo:<a href='/type/ChatPhoto'>ChatPhoto</a> date:<a href='/type/int'>int</a> restriction_reason:flags.9?<a href='/type/Vector%20t'>Vector</a><<a href='/type/RestrictionReason'>RestrictionReason</a>> admin_rights:flags.14?<a href='/type/ChatAdminRights'>ChatAdminRights</a> banned_rights:flags.15?<a href='/type/ChatBannedRights'>ChatBannedRights</a> default_banned_rights:flags.18?<a href='/type/ChatBannedRights'>ChatBannedRights</a> participants_count:flags.17?<a href='/type/int'>int</a> usernames:flags2.0?<a href='/type/Vector%20t'>Vector</a><<a href='/type/Username'>Username</a>> stories_max_id:flags2.4?<a href='/type/int'>int</a> color:flags2.7?<a href='/type/PeerColor'>PeerColor</a> profile_color:flags2.8?<a href='/type/PeerColor'>PeerColor</a> emoji_status:flags2.9?<a href='/type/EmojiStatus'>EmojiStatus</a> level:flags2.10?<a href='/type/int'>int</a> subscription_until_date:flags2.11?<a href='/type/int'>int</a> = <a href='/type/Chat'>Chat</a>;
|
<pre><code><a href='/constructor/channel'>channel</a>#fe4478bd flags:<a href='/type/%23'>#</a> creator:flags.0?<a href='/constructor/true'>true</a> left:flags.2?<a href='/constructor/true'>true</a> broadcast:flags.5?<a href='/constructor/true'>true</a> verified:flags.7?<a href='/constructor/true'>true</a> megagroup:flags.8?<a href='/constructor/true'>true</a> restricted:flags.9?<a href='/constructor/true'>true</a> signatures:flags.11?<a href='/constructor/true'>true</a> min:flags.12?<a href='/constructor/true'>true</a> scam:flags.19?<a href='/constructor/true'>true</a> has_link:flags.20?<a href='/constructor/true'>true</a> has_geo:flags.21?<a href='/constructor/true'>true</a> slowmode_enabled:flags.22?<a href='/constructor/true'>true</a> call_active:flags.23?<a href='/constructor/true'>true</a> call_not_empty:flags.24?<a href='/constructor/true'>true</a> fake:flags.25?<a href='/constructor/true'>true</a> gigagroup:flags.26?<a href='/constructor/true'>true</a> noforwards:flags.27?<a href='/constructor/true'>true</a> join_to_send:flags.28?<a href='/constructor/true'>true</a> join_request:flags.29?<a href='/constructor/true'>true</a> forum:flags.30?<a href='/constructor/true'>true</a> flags2:<a href='/type/%23'>#</a> stories_hidden:flags2.1?<a href='/constructor/true'>true</a> stories_hidden_min:flags2.2?<a href='/constructor/true'>true</a> stories_unavailable:flags2.3?<a href='/constructor/true'>true</a> signature_profiles:flags2.12?<a href='/constructor/true'>true</a> id:<a href='/type/long'>long</a> access_hash:flags.13?<a href='/type/long'>long</a> title:<a href='/type/string'>string</a> username:flags.6?<a href='/type/string'>string</a> photo:<a href='/type/ChatPhoto'>ChatPhoto</a> date:<a href='/type/int'>int</a> restriction_reason:flags.9?<a href='/type/Vector%20t'>Vector</a><<a href='/type/RestrictionReason'>RestrictionReason</a>> admin_rights:flags.14?<a href='/type/ChatAdminRights'>ChatAdminRights</a> banned_rights:flags.15?<a href='/type/ChatBannedRights'>ChatBannedRights</a> default_banned_rights:flags.18?<a href='/type/ChatBannedRights'>ChatBannedRights</a> participants_count:flags.17?<a href='/type/int'>int</a> usernames:flags2.0?<a href='/type/Vector%20t'>Vector</a><<a href='/type/Username'>Username</a>> stories_max_id:flags2.4?<a href='/type/int'>int</a> color:flags2.7?<a href='/type/PeerColor'>PeerColor</a> profile_color:flags2.8?<a href='/type/PeerColor'>PeerColor</a> emoji_status:flags2.9?<a href='/type/EmojiStatus'>EmojiStatus</a> level:flags2.10?<a href='/type/int'>int</a> subscription_until_date:flags2.11?<a href='/type/int'>int</a> = <a href='/type/Chat'>Chat</a>;
|
||||||
|
|
||||||
|
|
|
@ -208,6 +208,7 @@
|
||||||
</ul>
|
</ul>
|
||||||
<h5><a class="anchor" href="#changed-constructors" id="changed-constructors" name="changed-constructors"><i class="anchor-icon"></i></a>Changed Constructors</h5>
|
<h5><a class="anchor" href="#changed-constructors" id="changed-constructors" name="changed-constructors"><i class="anchor-icon"></i></a>Changed Constructors</h5>
|
||||||
<ul>
|
<ul>
|
||||||
|
<li>Added <strong>sub_extend</strong> parameter in <a href="/constructor/channelAdminLogEventsFilter">channelAdminLogEventsFilter</a></li>
|
||||||
<li>Added <strong>stars</strong> parameter, changed type of <strong>months</strong> from <strong>int</strong> to <strong>flags.4?int</strong> in <a href="/constructor/messageMediaGiveaway">messageMediaGiveaway</a></li>
|
<li>Added <strong>stars</strong> parameter, changed type of <strong>months</strong> from <strong>int</strong> to <strong>flags.4?int</strong> in <a href="/constructor/messageMediaGiveaway">messageMediaGiveaway</a></li>
|
||||||
<li>Added <strong>flags</strong>, <strong>stars</strong> parameters in <a href="/constructor/messageActionGiveawayLaunch">messageActionGiveawayLaunch</a></li>
|
<li>Added <strong>flags</strong>, <strong>stars</strong> parameters in <a href="/constructor/messageActionGiveawayLaunch">messageActionGiveawayLaunch</a></li>
|
||||||
<li>Added <strong>stars_prize</strong> parameter, changed type of <strong>gift_code_slug</strong> from <strong>flags.0?string</strong> to <strong>flags.3?string</strong>, <strong>activated_count</strong> from <strong>int</strong> to <strong>flags.2?int</strong> in <a href="/constructor/payments.giveawayInfoResults">payments.giveawayInfoResults</a></li>
|
<li>Added <strong>stars_prize</strong> parameter, changed type of <strong>gift_code_slug</strong> from <strong>flags.0?string</strong> to <strong>flags.3?string</strong>, <strong>activated_count</strong> from <strong>int</strong> to <strong>flags.2?int</strong> in <a href="/constructor/payments.giveawayInfoResults">payments.giveawayInfoResults</a></li>
|
||||||
|
@ -219,7 +220,8 @@
|
||||||
<li>Added <strong>flags</strong>, <strong>payload</strong> parameters in <a href="/constructor/inputMediaPaidMedia">inputMediaPaidMedia</a></li>
|
<li>Added <strong>flags</strong>, <strong>payload</strong> parameters in <a href="/constructor/inputMediaPaidMedia">inputMediaPaidMedia</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<h4><a class="anchor" href="#schema" id="schema" name="schema"><i class="anchor-icon"></i></a>Schema</h4>
|
<h4><a class="anchor" href="#schema" id="schema" name="schema"><i class="anchor-icon"></i></a>Schema</h4>
|
||||||
<div><pre><code><a href="/constructor/messageMediaGiveaway">messageMediaGiveaway</a>#aa073beb flags:<a href="/type/%23">#</a> only_new_subscribers:flags.0?<a href="/constructor/true">true</a> winners_are_visible:flags.2?<a href="/constructor/true">true</a> channels:<a href="/type/Vector%20t">Vector</a><<a href="/type/long">long</a>> countries_iso2:flags.1?<a href="/type/Vector%20t">Vector</a><<a href="/type/string">string</a>> prize_description:flags.3?<a href="/type/string">string</a> quantity:<a href="/type/int">int</a> months:flags.4?<a href="/type/int">int</a> stars:flags.5?<a href="/type/long">long</a> until_date:<a href="/type/int">int</a> = <a href="/type/MessageMedia">MessageMedia</a>;
|
<div><pre><code><a href="/constructor/channelAdminLogEventsFilter">channelAdminLogEventsFilter</a>#ea107ae4 flags:<a href="/type/%23">#</a> join:flags.0?<a href="/constructor/true">true</a> leave:flags.1?<a href="/constructor/true">true</a> invite:flags.2?<a href="/constructor/true">true</a> ban:flags.3?<a href="/constructor/true">true</a> unban:flags.4?<a href="/constructor/true">true</a> kick:flags.5?<a href="/constructor/true">true</a> unkick:flags.6?<a href="/constructor/true">true</a> promote:flags.7?<a href="/constructor/true">true</a> demote:flags.8?<a href="/constructor/true">true</a> info:flags.9?<a href="/constructor/true">true</a> settings:flags.10?<a href="/constructor/true">true</a> pinned:flags.11?<a href="/constructor/true">true</a> edit:flags.12?<a href="/constructor/true">true</a> delete:flags.13?<a href="/constructor/true">true</a> group_call:flags.14?<a href="/constructor/true">true</a> invites:flags.15?<a href="/constructor/true">true</a> send:flags.16?<a href="/constructor/true">true</a> forums:flags.17?<a href="/constructor/true">true</a> sub_extend:flags.18?<a href="/constructor/true">true</a> = <a href="/type/ChannelAdminLogEventsFilter">ChannelAdminLogEventsFilter</a>;<br>
|
||||||
|
<a href="/constructor/messageMediaGiveaway">messageMediaGiveaway</a>#aa073beb flags:<a href="/type/%23">#</a> only_new_subscribers:flags.0?<a href="/constructor/true">true</a> winners_are_visible:flags.2?<a href="/constructor/true">true</a> channels:<a href="/type/Vector%20t">Vector</a><<a href="/type/long">long</a>> countries_iso2:flags.1?<a href="/type/Vector%20t">Vector</a><<a href="/type/string">string</a>> prize_description:flags.3?<a href="/type/string">string</a> quantity:<a href="/type/int">int</a> months:flags.4?<a href="/type/int">int</a> stars:flags.5?<a href="/type/long">long</a> until_date:<a href="/type/int">int</a> = <a href="/type/MessageMedia">MessageMedia</a>;
|
||||||
<a href="/constructor/messageActionGiveawayLaunch">messageActionGiveawayLaunch</a>#a80f51e4 flags:<a href="/type/%23">#</a> stars:flags.0?<a href="/type/long">long</a> = <a href="/type/MessageAction">MessageAction</a>;<br>
|
<a href="/constructor/messageActionGiveawayLaunch">messageActionGiveawayLaunch</a>#a80f51e4 flags:<a href="/type/%23">#</a> stars:flags.0?<a href="/type/long">long</a> = <a href="/type/MessageAction">MessageAction</a>;<br>
|
||||||
<a href="/constructor/payments.giveawayInfoResults">payments.giveawayInfoResults</a>#e175e66f flags:<a href="/type/%23">#</a> winner:flags.0?<a href="/constructor/true">true</a> refunded:flags.1?<a href="/constructor/true">true</a> start_date:<a href="/type/int">int</a> gift_code_slug:flags.3?<a href="/type/string">string</a> stars_prize:flags.4?<a href="/type/long">long</a> finish_date:<a href="/type/int">int</a> winners_count:<a href="/type/int">int</a> activated_count:flags.2?<a href="/type/int">int</a> = <a href="/type/payments.GiveawayInfo">payments.GiveawayInfo</a>;<br>
|
<a href="/constructor/payments.giveawayInfoResults">payments.giveawayInfoResults</a>#e175e66f flags:<a href="/type/%23">#</a> winner:flags.0?<a href="/constructor/true">true</a> refunded:flags.1?<a href="/constructor/true">true</a> start_date:<a href="/type/int">int</a> gift_code_slug:flags.3?<a href="/type/string">string</a> stars_prize:flags.4?<a href="/type/long">long</a> finish_date:<a href="/type/int">int</a> winners_count:<a href="/type/int">int</a> activated_count:flags.2?<a href="/type/int">int</a> = <a href="/type/payments.GiveawayInfo">payments.GiveawayInfo</a>;<br>
|
||||||
<a href="/constructor/boost">boost</a>#4b3e14d6 flags:<a href="/type/%23">#</a> gift:flags.1?<a href="/constructor/true">true</a> giveaway:flags.2?<a href="/constructor/true">true</a> unclaimed:flags.3?<a href="/constructor/true">true</a> id:<a href="/type/string">string</a> user_id:flags.0?<a href="/type/long">long</a> giveaway_msg_id:flags.2?<a href="/type/int">int</a> date:<a href="/type/int">int</a> expires:<a href="/type/int">int</a> used_gift_slug:flags.4?<a href="/type/string">string</a> multiplier:flags.5?<a href="/type/int">int</a> stars:flags.6?<a href="/type/long">long</a> = <a href="/type/Boost">Boost</a>;<br>
|
<a href="/constructor/boost">boost</a>#4b3e14d6 flags:<a href="/type/%23">#</a> gift:flags.1?<a href="/constructor/true">true</a> giveaway:flags.2?<a href="/constructor/true">true</a> unclaimed:flags.3?<a href="/constructor/true">true</a> id:<a href="/type/string">string</a> user_id:flags.0?<a href="/type/long">long</a> giveaway_msg_id:flags.2?<a href="/type/int">int</a> date:<a href="/type/int">int</a> expires:<a href="/type/int">int</a> used_gift_slug:flags.4?<a href="/type/string">string</a> multiplier:flags.5?<a href="/type/int">int</a> stars:flags.6?<a href="/type/long">long</a> = <a href="/type/Boost">Boost</a>;<br>
|
||||||
|
@ -279,7 +281,6 @@
|
||||||
<li>Added <strong>paid_reactions_available</strong> parameter in <a href="/constructor/channelFull">channelFull</a></li>
|
<li>Added <strong>paid_reactions_available</strong> parameter in <a href="/constructor/channelFull">channelFull</a></li>
|
||||||
<li>Added <strong>flags</strong>, <strong>subscription_until_date</strong> parameters in <a href="/constructor/channelParticipant">channelParticipant</a></li>
|
<li>Added <strong>flags</strong>, <strong>subscription_until_date</strong> parameters in <a href="/constructor/channelParticipant">channelParticipant</a></li>
|
||||||
<li>Added <strong>subscription_until_date</strong> parameter in <a href="/constructor/channelParticipantSelf">channelParticipantSelf</a></li>
|
<li>Added <strong>subscription_until_date</strong> parameter in <a href="/constructor/channelParticipantSelf">channelParticipantSelf</a></li>
|
||||||
<li>Added <strong>sub_extend</strong> parameter in <a href="/constructor/channelAdminLogEventsFilter">channelAdminLogEventsFilter</a></li>
|
|
||||||
<li>Added <strong>media</strong> parameter in <a href="/constructor/sponsoredMessage">sponsoredMessage</a></li>
|
<li>Added <strong>media</strong> parameter in <a href="/constructor/sponsoredMessage">sponsoredMessage</a></li>
|
||||||
<li>Added <strong>top_reactors</strong> parameter in <a href="/constructor/messageReactions">messageReactions</a></li>
|
<li>Added <strong>top_reactors</strong> parameter in <a href="/constructor/messageReactions">messageReactions</a></li>
|
||||||
<li>Added <strong>reaction</strong>, <strong>subscription_period</strong> parameters in <a href="/constructor/starsTransaction">starsTransaction</a></li>
|
<li>Added <strong>reaction</strong>, <strong>subscription_period</strong> parameters in <a href="/constructor/starsTransaction">starsTransaction</a></li>
|
||||||
|
@ -292,8 +293,7 @@
|
||||||
<a href="/constructor/channel">channel</a>#fe4478bd flags:<a href="/type/%23">#</a> creator:flags.0?<a href="/constructor/true">true</a> left:flags.2?<a href="/constructor/true">true</a> broadcast:flags.5?<a href="/constructor/true">true</a> verified:flags.7?<a href="/constructor/true">true</a> megagroup:flags.8?<a href="/constructor/true">true</a> restricted:flags.9?<a href="/constructor/true">true</a> signatures:flags.11?<a href="/constructor/true">true</a> min:flags.12?<a href="/constructor/true">true</a> scam:flags.19?<a href="/constructor/true">true</a> has_link:flags.20?<a href="/constructor/true">true</a> has_geo:flags.21?<a href="/constructor/true">true</a> slowmode_enabled:flags.22?<a href="/constructor/true">true</a> call_active:flags.23?<a href="/constructor/true">true</a> call_not_empty:flags.24?<a href="/constructor/true">true</a> fake:flags.25?<a href="/constructor/true">true</a> gigagroup:flags.26?<a href="/constructor/true">true</a> noforwards:flags.27?<a href="/constructor/true">true</a> join_to_send:flags.28?<a href="/constructor/true">true</a> join_request:flags.29?<a href="/constructor/true">true</a> forum:flags.30?<a href="/constructor/true">true</a> flags2:<a href="/type/%23">#</a> stories_hidden:flags2.1?<a href="/constructor/true">true</a> stories_hidden_min:flags2.2?<a href="/constructor/true">true</a> stories_unavailable:flags2.3?<a href="/constructor/true">true</a> signature_profiles:flags2.12?<a href="/constructor/true">true</a> id:<a href="/type/long">long</a> access_hash:flags.13?<a href="/type/long">long</a> title:<a href="/type/string">string</a> username:flags.6?<a href="/type/string">string</a> photo:<a href="/type/ChatPhoto">ChatPhoto</a> date:<a href="/type/int">int</a> restriction_reason:flags.9?<a href="/type/Vector%20t">Vector</a><<a href="/type/RestrictionReason">RestrictionReason</a>> admin_rights:flags.14?<a href="/type/ChatAdminRights">ChatAdminRights</a> banned_rights:flags.15?<a href="/type/ChatBannedRights">ChatBannedRights</a> default_banned_rights:flags.18?<a href="/type/ChatBannedRights">ChatBannedRights</a> participants_count:flags.17?<a href="/type/int">int</a> usernames:flags2.0?<a href="/type/Vector%20t">Vector</a><<a href="/type/Username">Username</a>> stories_max_id:flags2.4?<a href="/type/int">int</a> color:flags2.7?<a href="/type/PeerColor">PeerColor</a> profile_color:flags2.8?<a href="/type/PeerColor">PeerColor</a> emoji_status:flags2.9?<a href="/type/EmojiStatus">EmojiStatus</a> level:flags2.10?<a href="/type/int">int</a> subscription_until_date:flags2.11?<a href="/type/int">int</a> = <a href="/type/Chat">Chat</a>;
|
<a href="/constructor/channel">channel</a>#fe4478bd flags:<a href="/type/%23">#</a> creator:flags.0?<a href="/constructor/true">true</a> left:flags.2?<a href="/constructor/true">true</a> broadcast:flags.5?<a href="/constructor/true">true</a> verified:flags.7?<a href="/constructor/true">true</a> megagroup:flags.8?<a href="/constructor/true">true</a> restricted:flags.9?<a href="/constructor/true">true</a> signatures:flags.11?<a href="/constructor/true">true</a> min:flags.12?<a href="/constructor/true">true</a> scam:flags.19?<a href="/constructor/true">true</a> has_link:flags.20?<a href="/constructor/true">true</a> has_geo:flags.21?<a href="/constructor/true">true</a> slowmode_enabled:flags.22?<a href="/constructor/true">true</a> call_active:flags.23?<a href="/constructor/true">true</a> call_not_empty:flags.24?<a href="/constructor/true">true</a> fake:flags.25?<a href="/constructor/true">true</a> gigagroup:flags.26?<a href="/constructor/true">true</a> noforwards:flags.27?<a href="/constructor/true">true</a> join_to_send:flags.28?<a href="/constructor/true">true</a> join_request:flags.29?<a href="/constructor/true">true</a> forum:flags.30?<a href="/constructor/true">true</a> flags2:<a href="/type/%23">#</a> stories_hidden:flags2.1?<a href="/constructor/true">true</a> stories_hidden_min:flags2.2?<a href="/constructor/true">true</a> stories_unavailable:flags2.3?<a href="/constructor/true">true</a> signature_profiles:flags2.12?<a href="/constructor/true">true</a> id:<a href="/type/long">long</a> access_hash:flags.13?<a href="/type/long">long</a> title:<a href="/type/string">string</a> username:flags.6?<a href="/type/string">string</a> photo:<a href="/type/ChatPhoto">ChatPhoto</a> date:<a href="/type/int">int</a> restriction_reason:flags.9?<a href="/type/Vector%20t">Vector</a><<a href="/type/RestrictionReason">RestrictionReason</a>> admin_rights:flags.14?<a href="/type/ChatAdminRights">ChatAdminRights</a> banned_rights:flags.15?<a href="/type/ChatBannedRights">ChatBannedRights</a> default_banned_rights:flags.18?<a href="/type/ChatBannedRights">ChatBannedRights</a> participants_count:flags.17?<a href="/type/int">int</a> usernames:flags2.0?<a href="/type/Vector%20t">Vector</a><<a href="/type/Username">Username</a>> stories_max_id:flags2.4?<a href="/type/int">int</a> color:flags2.7?<a href="/type/PeerColor">PeerColor</a> profile_color:flags2.8?<a href="/type/PeerColor">PeerColor</a> emoji_status:flags2.9?<a href="/type/EmojiStatus">EmojiStatus</a> level:flags2.10?<a href="/type/int">int</a> subscription_until_date:flags2.11?<a href="/type/int">int</a> = <a href="/type/Chat">Chat</a>;
|
||||||
<a href="/constructor/channelFull">channelFull</a>#bbab348d flags:<a href="/type/%23">#</a> can_view_participants:flags.3?<a href="/constructor/true">true</a> can_set_username:flags.6?<a href="/constructor/true">true</a> can_set_stickers:flags.7?<a href="/constructor/true">true</a> hidden_prehistory:flags.10?<a href="/constructor/true">true</a> can_set_location:flags.16?<a href="/constructor/true">true</a> has_scheduled:flags.19?<a href="/constructor/true">true</a> can_view_stats:flags.20?<a href="/constructor/true">true</a> blocked:flags.22?<a href="/constructor/true">true</a> flags2:<a href="/type/%23">#</a> can_delete_channel:flags2.0?<a href="/constructor/true">true</a> antispam:flags2.1?<a href="/constructor/true">true</a> participants_hidden:flags2.2?<a href="/constructor/true">true</a> translations_disabled:flags2.3?<a href="/constructor/true">true</a> stories_pinned_available:flags2.5?<a href="/constructor/true">true</a> view_forum_as_messages:flags2.6?<a href="/constructor/true">true</a> restricted_sponsored:flags2.11?<a href="/constructor/true">true</a> can_view_revenue:flags2.12?<a href="/constructor/true">true</a> paid_media_allowed:flags2.14?<a href="/constructor/true">true</a> can_view_stars_revenue:flags2.15?<a href="/constructor/true">true</a> paid_reactions_available:flags2.16?<a href="/constructor/true">true</a> id:<a href="/type/long">long</a> about:<a href="/type/string">string</a> participants_count:flags.0?<a href="/type/int">int</a> admins_count:flags.1?<a href="/type/int">int</a> kicked_count:flags.2?<a href="/type/int">int</a> banned_count:flags.2?<a href="/type/int">int</a> online_count:flags.13?<a href="/type/int">int</a> read_inbox_max_id:<a href="/type/int">int</a> read_outbox_max_id:<a href="/type/int">int</a> unread_count:<a href="/type/int">int</a> chat_photo:<a href="/type/Photo">Photo</a> notify_settings:<a href="/type/PeerNotifySettings">PeerNotifySettings</a> exported_invite:flags.23?<a href="/type/ExportedChatInvite">ExportedChatInvite</a> bot_info:<a href="/type/Vector%20t">Vector</a><<a href="/type/BotInfo">BotInfo</a>> migrated_from_chat_id:flags.4?<a href="/type/long">long</a> migrated_from_max_id:flags.4?<a href="/type/int">int</a> pinned_msg_id:flags.5?<a href="/type/int">int</a> stickerset:flags.8?<a href="/type/StickerSet">StickerSet</a> available_min_id:flags.9?<a href="/type/int">int</a> folder_id:flags.11?<a href="/type/int">int</a> linked_chat_id:flags.14?<a href="/type/long">long</a> location:flags.15?<a href="/type/ChannelLocation">ChannelLocation</a> slowmode_seconds:flags.17?<a href="/type/int">int</a> slowmode_next_send_date:flags.18?<a href="/type/int">int</a> stats_dc:flags.12?<a href="/type/int">int</a> pts:<a href="/type/int">int</a> call:flags.21?<a href="/type/InputGroupCall">InputGroupCall</a> ttl_period:flags.24?<a href="/type/int">int</a> pending_suggestions:flags.25?<a href="/type/Vector%20t">Vector</a><<a href="/type/string">string</a>> groupcall_default_join_as:flags.26?<a href="/type/Peer">Peer</a> theme_emoticon:flags.27?<a href="/type/string">string</a> requests_pending:flags.28?<a href="/type/int">int</a> recent_requesters:flags.28?<a href="/type/Vector%20t">Vector</a><<a href="/type/long">long</a>> default_send_as:flags.29?<a href="/type/Peer">Peer</a> available_reactions:flags.30?<a href="/type/ChatReactions">ChatReactions</a> reactions_limit:flags2.13?<a href="/type/int">int</a> stories:flags2.4?<a href="/type/PeerStories">PeerStories</a> wallpaper:flags2.7?<a href="/type/WallPaper">WallPaper</a> boosts_applied:flags2.8?<a href="/type/int">int</a> boosts_unrestrict:flags2.9?<a href="/type/int">int</a> emojiset:flags2.10?<a href="/type/StickerSet">StickerSet</a> = <a href="/type/ChatFull">ChatFull</a>;
|
<a href="/constructor/channelFull">channelFull</a>#bbab348d flags:<a href="/type/%23">#</a> can_view_participants:flags.3?<a href="/constructor/true">true</a> can_set_username:flags.6?<a href="/constructor/true">true</a> can_set_stickers:flags.7?<a href="/constructor/true">true</a> hidden_prehistory:flags.10?<a href="/constructor/true">true</a> can_set_location:flags.16?<a href="/constructor/true">true</a> has_scheduled:flags.19?<a href="/constructor/true">true</a> can_view_stats:flags.20?<a href="/constructor/true">true</a> blocked:flags.22?<a href="/constructor/true">true</a> flags2:<a href="/type/%23">#</a> can_delete_channel:flags2.0?<a href="/constructor/true">true</a> antispam:flags2.1?<a href="/constructor/true">true</a> participants_hidden:flags2.2?<a href="/constructor/true">true</a> translations_disabled:flags2.3?<a href="/constructor/true">true</a> stories_pinned_available:flags2.5?<a href="/constructor/true">true</a> view_forum_as_messages:flags2.6?<a href="/constructor/true">true</a> restricted_sponsored:flags2.11?<a href="/constructor/true">true</a> can_view_revenue:flags2.12?<a href="/constructor/true">true</a> paid_media_allowed:flags2.14?<a href="/constructor/true">true</a> can_view_stars_revenue:flags2.15?<a href="/constructor/true">true</a> paid_reactions_available:flags2.16?<a href="/constructor/true">true</a> id:<a href="/type/long">long</a> about:<a href="/type/string">string</a> participants_count:flags.0?<a href="/type/int">int</a> admins_count:flags.1?<a href="/type/int">int</a> kicked_count:flags.2?<a href="/type/int">int</a> banned_count:flags.2?<a href="/type/int">int</a> online_count:flags.13?<a href="/type/int">int</a> read_inbox_max_id:<a href="/type/int">int</a> read_outbox_max_id:<a href="/type/int">int</a> unread_count:<a href="/type/int">int</a> chat_photo:<a href="/type/Photo">Photo</a> notify_settings:<a href="/type/PeerNotifySettings">PeerNotifySettings</a> exported_invite:flags.23?<a href="/type/ExportedChatInvite">ExportedChatInvite</a> bot_info:<a href="/type/Vector%20t">Vector</a><<a href="/type/BotInfo">BotInfo</a>> migrated_from_chat_id:flags.4?<a href="/type/long">long</a> migrated_from_max_id:flags.4?<a href="/type/int">int</a> pinned_msg_id:flags.5?<a href="/type/int">int</a> stickerset:flags.8?<a href="/type/StickerSet">StickerSet</a> available_min_id:flags.9?<a href="/type/int">int</a> folder_id:flags.11?<a href="/type/int">int</a> linked_chat_id:flags.14?<a href="/type/long">long</a> location:flags.15?<a href="/type/ChannelLocation">ChannelLocation</a> slowmode_seconds:flags.17?<a href="/type/int">int</a> slowmode_next_send_date:flags.18?<a href="/type/int">int</a> stats_dc:flags.12?<a href="/type/int">int</a> pts:<a href="/type/int">int</a> call:flags.21?<a href="/type/InputGroupCall">InputGroupCall</a> ttl_period:flags.24?<a href="/type/int">int</a> pending_suggestions:flags.25?<a href="/type/Vector%20t">Vector</a><<a href="/type/string">string</a>> groupcall_default_join_as:flags.26?<a href="/type/Peer">Peer</a> theme_emoticon:flags.27?<a href="/type/string">string</a> requests_pending:flags.28?<a href="/type/int">int</a> recent_requesters:flags.28?<a href="/type/Vector%20t">Vector</a><<a href="/type/long">long</a>> default_send_as:flags.29?<a href="/type/Peer">Peer</a> available_reactions:flags.30?<a href="/type/ChatReactions">ChatReactions</a> reactions_limit:flags2.13?<a href="/type/int">int</a> stories:flags2.4?<a href="/type/PeerStories">PeerStories</a> wallpaper:flags2.7?<a href="/type/WallPaper">WallPaper</a> boosts_applied:flags2.8?<a href="/type/int">int</a> boosts_unrestrict:flags2.9?<a href="/type/int">int</a> emojiset:flags2.10?<a href="/type/StickerSet">StickerSet</a> = <a href="/type/ChatFull">ChatFull</a>;
|
||||||
<a href="/constructor/channelParticipant">channelParticipant</a>#cb397619 flags:<a href="/type/%23">#</a> user_id:<a href="/type/long">long</a> date:<a href="/type/int">int</a> subscription_until_date:flags.0?<a href="/type/int">int</a> = <a href="/type/ChannelParticipant">ChannelParticipant</a>;
|
<a href="/constructor/channelParticipant">channelParticipant</a>#cb397619 flags:<a href="/type/%23">#</a> user_id:<a href="/type/long">long</a> date:<a href="/type/int">int</a> subscription_until_date:flags.0?<a href="/type/int">int</a> = <a href="/type/ChannelParticipant">ChannelParticipant</a>;
|
||||||
<a href="/constructor/channelParticipantSelf">channelParticipantSelf</a>#4f607bef flags:<a href="/type/%23">#</a> via_request:flags.0?<a href="/constructor/true">true</a> user_id:<a href="/type/long">long</a> inviter_id:<a href="/type/long">long</a> date:<a href="/type/int">int</a> subscription_until_date:flags.1?<a href="/type/int">int</a> = <a href="/type/ChannelParticipant">ChannelParticipant</a>;
|
<a href="/constructor/channelParticipantSelf">channelParticipantSelf</a>#4f607bef flags:<a href="/type/%23">#</a> via_request:flags.0?<a href="/constructor/true">true</a> user_id:<a href="/type/long">long</a> inviter_id:<a href="/type/long">long</a> date:<a href="/type/int">int</a> subscription_until_date:flags.1?<a href="/type/int">int</a> = <a href="/type/ChannelParticipant">ChannelParticipant</a>;<br>
|
||||||
<a href="/constructor/channelAdminLogEventsFilter">channelAdminLogEventsFilter</a>#ea107ae4 flags:<a href="/type/%23">#</a> join:flags.0?<a href="/constructor/true">true</a> leave:flags.1?<a href="/constructor/true">true</a> invite:flags.2?<a href="/constructor/true">true</a> ban:flags.3?<a href="/constructor/true">true</a> unban:flags.4?<a href="/constructor/true">true</a> kick:flags.5?<a href="/constructor/true">true</a> unkick:flags.6?<a href="/constructor/true">true</a> promote:flags.7?<a href="/constructor/true">true</a> demote:flags.8?<a href="/constructor/true">true</a> info:flags.9?<a href="/constructor/true">true</a> settings:flags.10?<a href="/constructor/true">true</a> pinned:flags.11?<a href="/constructor/true">true</a> edit:flags.12?<a href="/constructor/true">true</a> delete:flags.13?<a href="/constructor/true">true</a> group_call:flags.14?<a href="/constructor/true">true</a> invites:flags.15?<a href="/constructor/true">true</a> send:flags.16?<a href="/constructor/true">true</a> forums:flags.17?<a href="/constructor/true">true</a> sub_extend:flags.18?<a href="/constructor/true">true</a> = <a href="/type/ChannelAdminLogEventsFilter">ChannelAdminLogEventsFilter</a>;<br>
|
|
||||||
<a href="/constructor/sponsoredMessage">sponsoredMessage</a>#4d93a990 flags:<a href="/type/%23">#</a> recommended:flags.5?<a href="/constructor/true">true</a> can_report:flags.12?<a href="/constructor/true">true</a> random_id:<a href="/type/bytes">bytes</a> url:<a href="/type/string">string</a> title:<a href="/type/string">string</a> message:<a href="/type/string">string</a> entities:flags.1?<a href="/type/Vector%20t">Vector</a><<a href="/type/MessageEntity">MessageEntity</a>> photo:flags.6?<a href="/type/Photo">Photo</a> media:flags.14?<a href="/type/MessageMedia">MessageMedia</a> color:flags.13?<a href="/type/PeerColor">PeerColor</a> button_text:<a href="/type/string">string</a> sponsor_info:flags.7?<a href="/type/string">string</a> additional_info:flags.8?<a href="/type/string">string</a> = <a href="/type/SponsoredMessage">SponsoredMessage</a>;<br>
|
<a href="/constructor/sponsoredMessage">sponsoredMessage</a>#4d93a990 flags:<a href="/type/%23">#</a> recommended:flags.5?<a href="/constructor/true">true</a> can_report:flags.12?<a href="/constructor/true">true</a> random_id:<a href="/type/bytes">bytes</a> url:<a href="/type/string">string</a> title:<a href="/type/string">string</a> message:<a href="/type/string">string</a> entities:flags.1?<a href="/type/Vector%20t">Vector</a><<a href="/type/MessageEntity">MessageEntity</a>> photo:flags.6?<a href="/type/Photo">Photo</a> media:flags.14?<a href="/type/MessageMedia">MessageMedia</a> color:flags.13?<a href="/type/PeerColor">PeerColor</a> button_text:<a href="/type/string">string</a> sponsor_info:flags.7?<a href="/type/string">string</a> additional_info:flags.8?<a href="/type/string">string</a> = <a href="/type/SponsoredMessage">SponsoredMessage</a>;<br>
|
||||||
<a href="/constructor/messageReactions">messageReactions</a>#0a339f0b flags:<a href="/type/%23">#</a> min:flags.0?<a href="/constructor/true">true</a> can_see_list:flags.2?<a href="/constructor/true">true</a> reactions_as_tags:flags.3?<a href="/constructor/true">true</a> results:<a href="/type/Vector%20t">Vector</a><<a href="/type/ReactionCount">ReactionCount</a>> recent_reactions:flags.1?<a href="/type/Vector%20t">Vector</a><<a href="/type/MessagePeerReaction">MessagePeerReaction</a>> top_reactors:flags.4?<a href="/type/Vector%20t">Vector</a><<a href="/type/MessageReactor">MessageReactor</a>> = <a href="/type/MessageReactions">MessageReactions</a>;<br>
|
<a href="/constructor/messageReactions">messageReactions</a>#0a339f0b flags:<a href="/type/%23">#</a> min:flags.0?<a href="/constructor/true">true</a> can_see_list:flags.2?<a href="/constructor/true">true</a> reactions_as_tags:flags.3?<a href="/constructor/true">true</a> results:<a href="/type/Vector%20t">Vector</a><<a href="/type/ReactionCount">ReactionCount</a>> recent_reactions:flags.1?<a href="/type/Vector%20t">Vector</a><<a href="/type/MessagePeerReaction">MessagePeerReaction</a>> top_reactors:flags.4?<a href="/type/Vector%20t">Vector</a><<a href="/type/MessageReactor">MessageReactor</a>> = <a href="/type/MessageReactions">MessageReactions</a>;<br>
|
||||||
<a href="/constructor/starsTransaction">starsTransaction</a>#433aeb2b flags:<a href="/type/%23">#</a> refund:flags.3?<a href="/constructor/true">true</a> pending:flags.4?<a href="/constructor/true">true</a> failed:flags.6?<a href="/constructor/true">true</a> gift:flags.10?<a href="/constructor/true">true</a> reaction:flags.11?<a href="/constructor/true">true</a> id:<a href="/type/string">string</a> stars:<a href="/type/long">long</a> date:<a href="/type/int">int</a> peer:<a href="/type/StarsTransactionPeer">StarsTransactionPeer</a> title:flags.0?<a href="/type/string">string</a> description:flags.1?<a href="/type/string">string</a> photo:flags.2?<a href="/type/WebDocument">WebDocument</a> transaction_date:flags.5?<a href="/type/int">int</a> transaction_url:flags.5?<a href="/type/string">string</a> bot_payload:flags.7?<a href="/type/bytes">bytes</a> msg_id:flags.8?<a href="/type/int">int</a> extended_media:flags.9?<a href="/type/Vector%20t">Vector</a><<a href="/type/MessageMedia">MessageMedia</a>> subscription_period:flags.12?<a href="/type/int">int</a> = <a href="/type/StarsTransaction">StarsTransaction</a>;<br>
|
<a href="/constructor/starsTransaction">starsTransaction</a>#433aeb2b flags:<a href="/type/%23">#</a> refund:flags.3?<a href="/constructor/true">true</a> pending:flags.4?<a href="/constructor/true">true</a> failed:flags.6?<a href="/constructor/true">true</a> gift:flags.10?<a href="/constructor/true">true</a> reaction:flags.11?<a href="/constructor/true">true</a> id:<a href="/type/string">string</a> stars:<a href="/type/long">long</a> date:<a href="/type/int">int</a> peer:<a href="/type/StarsTransactionPeer">StarsTransactionPeer</a> title:flags.0?<a href="/type/string">string</a> description:flags.1?<a href="/type/string">string</a> photo:flags.2?<a href="/type/WebDocument">WebDocument</a> transaction_date:flags.5?<a href="/type/int">int</a> transaction_url:flags.5?<a href="/type/string">string</a> bot_payload:flags.7?<a href="/type/bytes">bytes</a> msg_id:flags.8?<a href="/type/int">int</a> extended_media:flags.9?<a href="/type/Vector%20t">Vector</a><<a href="/type/MessageMedia">MessageMedia</a>> subscription_period:flags.12?<a href="/type/int">int</a> = <a href="/type/StarsTransaction">StarsTransaction</a>;<br>
|
||||||
|
|
|
@ -105,13 +105,15 @@ Use <a href="/method/messages.readReactions">messages.readReactions</a> to mark
|
||||||
|
|
||||||
<a href='/method/messages.getMessagesReactions'>messages.getMessagesReactions</a>#8bba90e6 peer:<a href='/type/InputPeer'>InputPeer</a> id:<a href='/type/Vector%20t'>Vector</a><<a href='/type/int'>int</a>> = <a href='/type/Updates'>Updates</a>;</code></pre>
|
<a href='/method/messages.getMessagesReactions'>messages.getMessagesReactions</a>#8bba90e6 peer:<a href='/type/InputPeer'>InputPeer</a> id:<a href='/type/Vector%20t'>Vector</a><<a href='/type/int'>int</a>> = <a href='/type/Updates'>Updates</a>;</code></pre>
|
||||||
<p>Paid reactions (aka Star reactions) may be sent to channel posts by invoking <a href="/method/messages.sendPaidReaction">messages.sendPaidReaction</a>: this will transfer <code>count</code> Telegram Stars to the channel's balance and increment by <code>count</code> the reaction counter of the Star reaction with type <a href="/constructor/reactionPaid">reactionPaid</a>. </p>
|
<p>Paid reactions (aka Star reactions) may be sent to channel posts by invoking <a href="/method/messages.sendPaidReaction">messages.sendPaidReaction</a>: this will transfer <code>count</code> Telegram Stars to the channel's balance and increment by <code>count</code> the reaction counter of the Star reaction with type <a href="/constructor/reactionPaid">reactionPaid</a>. </p>
|
||||||
<p>To enable paid reactions, channel admins must invoke <a href="/method/messages.setChatAvailableReactions">messages.setChatAvailableReactions</a>, passing <a href="/constructor/boolTrue">boolTrue</a> to <code>paid_enabled</code> and the previously configured reaction set in <code>available_reactions</code> (<code>reactions_limit</code> can be omitted, as omitting the flag will keep the previously configured value). </p>
|
<p>To enable paid reactions, channel admins must invoke <a href="/method/messages.setChatAvailableReactions">messages.setChatAvailableReactions</a>, passing <a href="/constructor/boolTrue">boolTrue</a> to <code>paid_enabled</code> and the previously configured reaction set in <code>available_reactions</code> (<code>reactions_limit</code> can be omitted, as omitting the flag will keep the previously configured value). </p>
|
||||||
|
<p>Users can determine whether a channel supports paid reactions by checking the value of the <a href="/constructor/channelFull">channelFull</a>.<code>paid_reactions_available</code> flag. </p>
|
||||||
<p>Each post with star reactions has a leaderboard with the top senders, but users can opt out of appearing there if they prefer more privacy.<br>
|
<p>Each post with star reactions has a leaderboard with the top senders, but users can opt out of appearing there if they prefer more privacy.<br>
|
||||||
If the user explicitly chose to make their paid reaction(s) private, pass <a href="/constructor/boolTrue">boolTrue</a> to <a href="/method/messages.sendPaidReaction">messages.sendPaidReaction</a>.<code>private</code>.<br>
|
If the user explicitly chose to make their paid reaction(s) private, pass <a href="/constructor/boolTrue">boolTrue</a> to <a href="/method/messages.sendPaidReaction">messages.sendPaidReaction</a>.<code>private</code>.<br>
|
||||||
If the user explicitly chose to make their paid reaction(s) private, pass <a href="/constructor/boolTrue">boolFalse</a> to <a href="/method/messages.sendPaidReaction">messages.sendPaidReaction</a>.<code>private</code>.<br>
|
If the user explicitly chose to make their paid reaction(s) private, pass <a href="/constructor/boolTrue">boolFalse</a> to <a href="/method/messages.sendPaidReaction">messages.sendPaidReaction</a>.<code>private</code>.<br>
|
||||||
If the user did not make any explicit choice about the privacy of their paid reaction(s) (i.e. when reacting by clicking on an existing star reaction on a message), do not populate the <a href="/method/messages.sendPaidReaction">messages.sendPaidReaction</a>.<code>private</code> flag. </p>
|
If the user did not make any explicit choice about the privacy of their paid reaction(s) (i.e. when reacting by clicking on an existing star reaction on a message), do not populate the <a href="/method/messages.sendPaidReaction">messages.sendPaidReaction</a>.<code>private</code> flag. </p>
|
||||||
<p>To change the privacy of already sent paid reactions, invoke <a href="/method/messages.togglePaidReactionPrivacy">messages.togglePaidReactionPrivacy</a>, passing the ID of the message, the channel and the desired privacy setting. </p>
|
<p>To change the privacy of already sent paid reactions, invoke <a href="/method/messages.togglePaidReactionPrivacy">messages.togglePaidReactionPrivacy</a>, passing the ID of the message, the channel and the desired privacy setting. </p>
|
||||||
<p>To fetch the paid reactions leaderboard, invoke <a href="/method/messages.getMessagesReactions">messages.getMessagesReactions</a>: the returned <a href="/constructor/updateMessageReactions">updateMessageReactions</a> constructor will contain a <code>top_reactors</code> vector of <a href="/constructor/messageReactor">messageReactor</a>s, containing the paid reactions leaderboard for that message. </p>
|
<p>To fetch the paid reactions leaderboard, invoke <a href="/method/messages.getMessagesReactions">messages.getMessagesReactions</a>: the returned <a href="/constructor/updateMessageReactions">updateMessageReactions</a> constructor will contain a <code>top_reactors</code> vector of <a href="/constructor/messageReactor">messageReactor</a>s, containing the paid reactions leaderboard for that message. </p>
|
||||||
|
<p>Channel admins can also see the end date of the current subscription period for any user in <a href="/constructor/channelParticipant">channelParticipant</a>.<code>subscription_until_date</code>.</p>
|
||||||
<h3><a class="anchor" href="#react-to-a-story" id="react-to-a-story" name="react-to-a-story"><i class="anchor-icon"></i></a>React to a story</h3>
|
<h3><a class="anchor" href="#react-to-a-story" id="react-to-a-story" name="react-to-a-story"><i class="anchor-icon"></i></a>React to a story</h3>
|
||||||
<p>See <a href="/api/stories#reactions">here »</a> for more info on how to react to a story.</p>
|
<p>See <a href="/api/stories#reactions">here »</a> for more info on how to react to a story.</p>
|
||||||
<h3><a class="anchor" href="#notifications-about-reactions" id="notifications-about-reactions" name="notifications-about-reactions"><i class="anchor-icon"></i></a>Notifications about reactions</h3>
|
<h3><a class="anchor" href="#notifications-about-reactions" id="notifications-about-reactions" name="notifications-about-reactions"><i class="anchor-icon"></i></a>Notifications about reactions</h3>
|
||||||
|
|
|
@ -82,12 +82,12 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td><strong>signatures_enabled</strong></td>
|
<td><strong>signatures_enabled</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 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, enables message signatures.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><strong>profiles_enabled</strong></td>
|
<td><strong>profiles_enabled</strong></td>
|
||||||
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.1?<a href="/constructor/true">true</a></td>
|
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.1?<a href="/constructor/true">true</a></td>
|
||||||
<td> </td>
|
<td>If set, messages from channel admins will link to their profiles, just like for group messages: can only be set if the <code>signatures_enabled</code> flag is set.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><strong>channel</strong></td>
|
<td><strong>channel</strong></td>
|
||||||
|
|
|
@ -81,7 +81,7 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td><strong>subscription_expired</strong></td>
|
<td><strong>subscription_expired</strong></td>
|
||||||
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.3?<a href="/constructor/true">true</a></td>
|
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.3?<a href="/constructor/true">true</a></td>
|
||||||
<td> </td>
|
<td>Set this flag if the link is a <a href="/api/stars#star-subscriptions">Telegram Star subscription link »</a> and only members with already expired subscription must be returned.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><strong>peer</strong></td>
|
<td><strong>peer</strong></td>
|
||||||
|
@ -167,6 +167,8 @@
|
||||||
<h3><a class="anchor" href="#related-pages" id="related-pages" name="related-pages"><i class="anchor-icon"></i></a>Related pages</h3>
|
<h3><a class="anchor" href="#related-pages" id="related-pages" name="related-pages"><i class="anchor-icon"></i></a>Related pages</h3>
|
||||||
<h4><a class="anchor" href="#invites" id="invites" name="invites"><i class="anchor-icon"></i></a><a href="/api/invites">Invites</a></h4>
|
<h4><a class="anchor" href="#invites" id="invites" name="invites"><i class="anchor-icon"></i></a><a href="/api/invites">Invites</a></h4>
|
||||||
<p>Chats and channels may have a public username or a private invite link: private invite links may be further enhanced with per-user join requests.</p>
|
<p>Chats and channels may have a public username or a private invite link: private invite links may be further enhanced with per-user join requests.</p>
|
||||||
|
<h4><a class="anchor" href="#telegram-stars" id="telegram-stars" name="telegram-stars"><i class="anchor-icon"></i></a><a href="/api/stars">Telegram Stars</a></h4>
|
||||||
|
<p>Telegram Stars are virtual items that allow users to purchase digital goods and services from bots and mini apps inside the Telegram ecosystem, send gifts to content creators on the Telegram platform, and more.</p>
|
||||||
<h4><a class="anchor" href="#pagination-in-the-api" id="pagination-in-the-api" name="pagination-in-the-api"><i class="anchor-icon"></i></a><a href="/api/offsets">Pagination in the API</a></h4>
|
<h4><a class="anchor" href="#pagination-in-the-api" id="pagination-in-the-api" name="pagination-in-the-api"><i class="anchor-icon"></i></a><a href="/api/offsets">Pagination in the API</a></h4>
|
||||||
<p>How to fetch results from large lists of objects.</p></div>
|
<p>How to fetch results from large lists of objects.</p></div>
|
||||||
|
|
||||||
|
|
|
@ -92,7 +92,7 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td><strong>subscription_id</strong></td>
|
<td><strong>subscription_id</strong></td>
|
||||||
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.3?<a href="/type/string">string</a></td>
|
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.3?<a href="/type/string">string</a></td>
|
||||||
<td> </td>
|
<td>If set, fetches only transactions for the specified <a href="/api/stars#star-subscriptions">Telegram Star subscription »</a>.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><strong>peer</strong></td>
|
<td><strong>peer</strong></td>
|
||||||
|
@ -137,12 +137,12 @@
|
||||||
</table>
|
</table>
|
||||||
<h3><a class="anchor" href="#bots-can-use-this-method" id="bots-can-use-this-method" name="bots-can-use-this-method"><i class="anchor-icon"></i></a>Bots can use this method</h3>
|
<h3><a class="anchor" href="#bots-can-use-this-method" id="bots-can-use-this-method" name="bots-can-use-this-method"><i class="anchor-icon"></i></a>Bots can use this method</h3>
|
||||||
<h3><a class="anchor" href="#related-pages" id="related-pages" name="related-pages"><i class="anchor-icon"></i></a>Related pages</h3>
|
<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-stars" id="telegram-stars" name="telegram-stars"><i class="anchor-icon"></i></a><a href="/api/stars">Telegram Stars</a></h4>
|
||||||
|
<p>Telegram Stars are virtual items that allow users to purchase digital goods and services from bots and mini apps inside the Telegram ecosystem, send gifts to content creators on the Telegram platform, and more.</p>
|
||||||
<h4><a class="anchor" href="#inputpeerself" id="inputpeerself" name="inputpeerself"><i class="anchor-icon"></i></a><a href="/constructor/inputPeerSelf">inputPeerSelf</a></h4>
|
<h4><a class="anchor" href="#inputpeerself" id="inputpeerself" name="inputpeerself"><i class="anchor-icon"></i></a><a href="/constructor/inputPeerSelf">inputPeerSelf</a></h4>
|
||||||
<p>Defines the current user.</p>
|
<p>Defines the current user.</p>
|
||||||
<h4><a class="anchor" href="#pagination-in-the-api" id="pagination-in-the-api" name="pagination-in-the-api"><i class="anchor-icon"></i></a><a href="/api/offsets">Pagination in the API</a></h4>
|
<h4><a class="anchor" href="#pagination-in-the-api" id="pagination-in-the-api" name="pagination-in-the-api"><i class="anchor-icon"></i></a><a href="/api/offsets">Pagination in the API</a></h4>
|
||||||
<p>How to fetch results from large lists of objects.</p>
|
<p>How to fetch results from large lists of objects.</p></div>
|
||||||
<h4><a class="anchor" href="#telegram-stars" id="telegram-stars" name="telegram-stars"><i class="anchor-icon"></i></a><a href="/api/stars">Telegram Stars</a></h4>
|
|
||||||
<p>Telegram Stars are virtual items that allow users to purchase digital goods and services from bots and mini apps inside the Telegram ecosystem, send gifts to content creators on the Telegram platform, and more.</p></div>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -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>
|
<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 -->
|
<!-- start req_pq_multi -->
|
||||||
<p>Sent payload (excluding transport headers/trailers):</p>
|
<p>Sent payload (excluding transport headers/trailers):</p>
|
||||||
<pre><code>0000 | 00 00 00 00 00 00 00 00 D8 7F 03 00 DD A6 38 67
|
<pre><code>0000 | 00 00 00 00 00 00 00 00 CC C4 07 00 09 A9 38 67
|
||||||
0010 | 14 00 00 00 F1 8E 7E BE F2 FF EB DA 55 A0 62 61
|
0010 | 14 00 00 00 F1 8E 7E BE 88 A0 0C B2 64 2E 0D CC
|
||||||
0020 | 90 B6 57 AC CD F3 9C 05</code></pre>
|
0020 | D6 BD 55 3F 42 43 30 B4</code></pre>
|
||||||
<p>Payload (de)serialization:</p>
|
<p>Payload (de)serialization:</p>
|
||||||
<pre><code>req_pq_multi#be7e8ef1 nonce:int128 = ResPQ;</code></pre>
|
<pre><code>req_pq_multi#be7e8ef1 nonce:int128 = ResPQ;</code></pre>
|
||||||
<table class="table">
|
<table class="table">
|
||||||
|
@ -77,7 +77,7 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td>message_id</td>
|
<td>message_id</td>
|
||||||
<td>8, 8</td>
|
<td>8, 8</td>
|
||||||
<td><code>D87F0300DDA63867</code></td>
|
<td><code>CCC4070009A93867</code></td>
|
||||||
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() << 32) + (N*4)</td>
|
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() << 32) + (N*4)</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -95,7 +95,7 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td>nonce</td>
|
<td>nonce</td>
|
||||||
<td>24, 16</td>
|
<td>24, 16</td>
|
||||||
<td><code>F2FFEBDA55A0626190B657ACCDF39C05</code></td>
|
<td><code>88A00CB2642E0DCCD6BD553F424330B4</code></td>
|
||||||
<td>Random number</td>
|
<td>Random number</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</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>
|
<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 -->
|
<!-- start resPQ -->
|
||||||
<p>Received payload (excluding transport headers/trailers):</p>
|
<p>Received payload (excluding transport headers/trailers):</p>
|
||||||
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 30 5D EC DD A6 38 67
|
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 78 D6 E3 09 A9 38 67
|
||||||
0010 | 50 00 00 00 63 24 16 05 F2 FF EB DA 55 A0 62 61
|
0010 | 50 00 00 00 63 24 16 05 88 A0 0C B2 64 2E 0D CC
|
||||||
0020 | 90 B6 57 AC CD F3 9C 05 C8 97 E4 83 8C 1A 47 33
|
0020 | D6 BD 55 3F 42 43 30 B4 8A 33 80 8D 1D 5B AE E2
|
||||||
0030 | D9 43 AB 98 93 64 1F B4 08 15 4F 99 C1 AD 76 59
|
0030 | 7E 2D 08 4D AB 67 CE D0 08 19 EE AA 4A 04 90 58
|
||||||
0040 | B7 00 00 00 15 C4 B5 1C 03 00 00 00 85 FD 64 DE
|
0040 | BD 00 00 00 15 C4 B5 1C 03 00 00 00 85 FD 64 DE
|
||||||
0050 | 85 1D 9D D0 A5 B7 F7 09 35 5F C3 0B 21 6B E8 6C
|
0050 | 85 1D 9D D0 A5 B7 F7 09 35 5F C3 0B 21 6B E8 6C
|
||||||
0060 | 02 2B B4 C3</code></pre>
|
0060 | 02 2B B4 C3</code></pre>
|
||||||
<p>Payload (de)serialization:</p>
|
<p>Payload (de)serialization:</p>
|
||||||
|
@ -132,7 +132,7 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td>message_id</td>
|
<td>message_id</td>
|
||||||
<td>8, 8</td>
|
<td>8, 8</td>
|
||||||
<td><code>01305DECDDA63867</code></td>
|
<td><code>0178D6E309A93867</code></td>
|
||||||
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() << 32) + (N*4)</td>
|
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() << 32) + (N*4)</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -150,19 +150,19 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td>nonce</td>
|
<td>nonce</td>
|
||||||
<td>24, 16</td>
|
<td>24, 16</td>
|
||||||
<td><code>F2FFEBDA55A0626190B657ACCDF39C05</code></td>
|
<td><code>88A00CB2642E0DCCD6BD553F424330B4</code></td>
|
||||||
<td>Value generated by client in Step 1</td>
|
<td>Value generated by client in Step 1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>server_nonce</td>
|
<td>server_nonce</td>
|
||||||
<td>40, 16</td>
|
<td>40, 16</td>
|
||||||
<td><code>C897E4838C1A4733D943AB9893641FB4</code></td>
|
<td><code>8A33808D1D5BAEE27E2D084DAB67CED0</code></td>
|
||||||
<td>Server-generated random number</td>
|
<td>Server-generated random number</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>pq</td>
|
<td>pq</td>
|
||||||
<td>56, 12</td>
|
<td>56, 12</td>
|
||||||
<td><code>08154F99C1AD7659B7000000</code><br>TL byte deserialization <br>=> bigendian conversion to decimal<br>=> 1535615055074580919</td>
|
<td><code>0819EEAA4A049058BD000000</code><br>TL byte deserialization <br>=> bigendian conversion to decimal<br>=> 1868618130286205117</td>
|
||||||
<td>Single-byte prefix denoting length, an 8-byte string, and three bytes of padding</td>
|
<td>Single-byte prefix denoting length, an 8-byte string, and three bytes of padding</td>
|
||||||
</tr>
|
</tr>
|
||||||
<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>
|
<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 < q.</h5>
|
<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 < q.</h5>
|
||||||
<!-- start pq -->
|
<!-- start pq -->
|
||||||
<pre><code>pq = 1535615055074580919</code></pre>
|
<pre><code>pq = 1868618130286205117</code></pre>
|
||||||
<p>Decompose into 2 prime cofactors <code>p < q</code>: <code>1535615055074580919 = 1164798461 * 1318352579</code></p>
|
<p>Decompose into 2 prime cofactors <code>p < q</code>: <code>1868618130286205117 = 1093105483 * 1709458199</code></p>
|
||||||
<pre><code>p = 1164798461
|
<pre><code>p = 1093105483
|
||||||
q = 1318352579</code></pre>
|
q = 1709458199</code></pre>
|
||||||
<!-- end pq -->
|
<!-- 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>
|
<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>
|
<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>
|
<p>First of all, generate an <code>encrypted_data</code> payload as follows:</p>
|
||||||
<!-- start p_q_inner_data_dc -->
|
<!-- start p_q_inner_data_dc -->
|
||||||
<p>Generated payload (excluding transport headers/trailers):</p>
|
<p>Generated payload (excluding transport headers/trailers):</p>
|
||||||
<pre><code>0000 | 95 5F F5 A9 08 15 4F 99 C1 AD 76 59 B7 00 00 00
|
<pre><code>0000 | 95 5F F5 A9 08 19 EE AA 4A 04 90 58 BD 00 00 00
|
||||||
0010 | 04 45 6D 69 FD 00 00 00 04 4E 94 76 C3 00 00 00
|
0010 | 04 41 27 77 4B 00 00 00 04 65 E4 43 17 00 00 00
|
||||||
0020 | F2 FF EB DA 55 A0 62 61 90 B6 57 AC CD F3 9C 05
|
0020 | 88 A0 0C B2 64 2E 0D CC D6 BD 55 3F 42 43 30 B4
|
||||||
0030 | C8 97 E4 83 8C 1A 47 33 D9 43 AB 98 93 64 1F B4
|
0030 | 8A 33 80 8D 1D 5B AE E2 7E 2D 08 4D AB 67 CE D0
|
||||||
0040 | 11 83 DF 59 14 4A 45 26 F1 B0 E6 C9 A4 B2 7C 6C
|
0040 | C6 1C 4C B1 76 7F D6 E5 66 1D 48 E8 30 35 96 85
|
||||||
0050 | 80 36 BD EE 0C 5C 7A D7 07 F6 94 1A AE C9 28 8E
|
0050 | BB E4 FD 66 9F 97 F4 20 34 05 82 EE CF 6A 39 84
|
||||||
0060 | 02 00 00 00</code></pre>
|
0060 | 02 00 00 00</code></pre>
|
||||||
<p>Payload (de)serialization:</p>
|
<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>
|
<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 = 1318352579</code></pre>
|
||||||
<tr>
|
<tr>
|
||||||
<td>pq</td>
|
<td>pq</td>
|
||||||
<td>4, 12</td>
|
<td>4, 12</td>
|
||||||
<td><code>08154F99C1AD7659B7000000</code><br>TL byte deserialization <br>=> bigendian conversion to decimal<br>=> 1535615055074580919</td>
|
<td><code>0819EEAA4A049058BD000000</code><br>TL byte deserialization <br>=> bigendian conversion to decimal<br>=> 1868618130286205117</td>
|
||||||
<td>Single-byte prefix denoting length, 8-byte string, and three bytes of padding</td>
|
<td>Single-byte prefix denoting length, 8-byte string, and three bytes of padding</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>p</td>
|
<td>p</td>
|
||||||
<td>16, 8</td>
|
<td>16, 8</td>
|
||||||
<td><code>04456D69FD000000</code><br>TL byte deserialization <br>=> bigendian conversion to decimal<br>=> 1164798461</td>
|
<td><code>044127774B000000</code><br>TL byte deserialization <br>=> bigendian conversion to decimal<br>=> 1093105483</td>
|
||||||
<td>First prime cofactor: single-byte prefix denoting length, 4-byte string, and three bytes of padding</td>
|
<td>First prime cofactor: single-byte prefix denoting length, 4-byte string, and three bytes of padding</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>q</td>
|
<td>q</td>
|
||||||
<td>24, 8</td>
|
<td>24, 8</td>
|
||||||
<td><code>044E9476C3000000</code><br>TL byte deserialization <br>=> bigendian conversion to decimal<br>=> 1318352579</td>
|
<td><code>0465E44317000000</code><br>TL byte deserialization <br>=> bigendian conversion to decimal<br>=> 1709458199</td>
|
||||||
<td>Second prime cofactor: single-byte prefix denoting length, 4-byte string, and three bytes of padding</td>
|
<td>Second prime cofactor: single-byte prefix denoting length, 4-byte string, and three bytes of padding</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>nonce</td>
|
<td>nonce</td>
|
||||||
<td>32, 16</td>
|
<td>32, 16</td>
|
||||||
<td><code>F2FFEBDA55A0626190B657ACCDF39C05</code></td>
|
<td><code>88A00CB2642E0DCCD6BD553F424330B4</code></td>
|
||||||
<td>Value generated by client in Step 1</td>
|
<td>Value generated by client in Step 1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>server_nonce</td>
|
<td>server_nonce</td>
|
||||||
<td>48, 16</td>
|
<td>48, 16</td>
|
||||||
<td><code>C897E4838C1A4733D943AB9893641FB4</code></td>
|
<td><code>8A33808D1D5BAEE27E2D084DAB67CED0</code></td>
|
||||||
<td>Value received from server in Step 2</td>
|
<td>Value received from server in Step 2</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>new_nonce</td>
|
<td>new_nonce</td>
|
||||||
<td>64, 32</td>
|
<td>64, 32</td>
|
||||||
<td><code>1183DF59144A4526F1B0E6C9A4B27C6C</code> <code>8036BDEE0C5C7AD707F6941AAEC9288E</code></td>
|
<td><code>C61C4CB1767FD6E5661D48E830359685</code> <code>BBE4FD669F97F420340582EECF6A3984</code></td>
|
||||||
<td>Client-generated random number</td>
|
<td>Client-generated random number</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -291,39 +291,39 @@ q = 1318352579</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>
|
<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>
|
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 -->
|
<!-- start p_q_inner_data_input -->
|
||||||
<pre><code>data = 955FF5A908154F99C1AD7659B700000004456D69FD000000044E9476C3000000F2FFEBDA55A0626190B657ACCDF39C05C897E4838C1A4733D943AB9893641FB41183DF59144A4526F1B0E6C9A4B27C6C8036BDEE0C5C7AD707F6941AAEC9288E02000000
|
<pre><code>data = 955FF5A90819EEAA4A049058BD000000044127774B0000000465E4431700000088A00CB2642E0DCCD6BD553F424330B48A33808D1D5BAEE27E2D084DAB67CED0C61C4CB1767FD6E5661D48E830359685BBE4FD669F97F420340582EECF6A398402000000
|
||||||
random_padding_bytes = BE3707A89AE9B01B20AFBF2DFE2469A511655C0B8BC61714EB603611AF1FA618B2943619E8AA74B88439ED0870657660BC1167DFF5A7BBA65DC878A3F677C3E8D9DBCE966EBEADB069E11FCA0DA8EEA1F411182BAE338F54BCE44AE6</code></pre>
|
random_padding_bytes = 4FD6DF70DAC10A80FB882E175ED130769E47ACA62330CFA8098708C10A765264176E3391DBC1E80CDEADD8C4A4EC3CBA7CA7C08FBBD4881A4435EC7B6A4A5CF5897E970AAA0330FA4C188BA83A02620EBC82AF9426FD88829A5683AD</code></pre>
|
||||||
<!-- end p_q_inner_data_input -->
|
<!-- end p_q_inner_data_input -->
|
||||||
<p>And this is the output:</p>
|
<p>And this is the output:</p>
|
||||||
<!-- start p_q_inner_data_output -->
|
<!-- start p_q_inner_data_output -->
|
||||||
<pre><code>encrypted_data = 350F55A03139C665B4C03D92B4E02D81AB71F6B7BE05CADBFAE678223B0DBB53192D60A9AD6A9E1A36EC9EE33A69B7ACD965E488C3ECB859DC7DCAF9303F24BA38556EC7584AE5448A979BF70F031EBD219F3795209A2D07A4E09DEF29638458CF1A3798D59483C8F7C8FA0D24FE31676E8AE9D8AB10AA7C0702A16CC2E096C861700D073E5131E716A98FE1051AD58526F1F151ADADD2E19F537E716CD5558330DEDDE1D49BE50AC20CE6A040823EB497037B49FCA16549479A4E7AF3D349B907E71FD32E675B487CB7995833619B8185F1DCDAFD7309302B0829C18B049CC796F4DC7A79CE49D614A92304D67EA44A1B57E70FA89441BDE0DA58484AACB666</code></pre>
|
<pre><code>encrypted_data = 619B4727009001B44082013B8731011A984F708CD5D0C253FF48BDB3DFAFA2637FFA25B40B4C4BFB28504DE7B3F0066D6895B79B7C29B3F74A5358493E28D73D3B0D14D531EF6A1A4270C593E8D10EB3B246AE668DA94B2F65F3CC4E63BD6AA543B543E51327D426B983BD2E1A64CDB6E697C9BA4671DDCCCAFEC541716862CBDA37A8A1F3678CC75CE9E564F0A6A19EABDFB94EFB41CBDB586611757F7EEFFAD47B62C9A65931079DFD9ECAF4A451D8470491FEC1E5EAC6BB92D2F6E7D4B7418527C486478159F867591422ED7130CA98D5B274EBEBB139EA3579A6A81113A3A70921388898D18A4F5B56E8931D422108292B1BE3E8DD4FEB59E6C8B530AE54</code></pre>
|
||||||
<!-- end p_q_inner_data_output -->
|
<!-- end p_q_inner_data_output -->
|
||||||
<p>The length of the final string is 256 bytes.</p>
|
<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>
|
<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 -->
|
<!-- start req_DH_params -->
|
||||||
<p>Sent payload (excluding transport headers/trailers):</p>
|
<p>Sent payload (excluding transport headers/trailers):</p>
|
||||||
<pre><code>0000 | 00 00 00 00 00 00 00 00 B4 9A 03 00 DD A6 38 67
|
<pre><code>0000 | 00 00 00 00 00 00 00 00 D0 C4 07 00 09 A9 38 67
|
||||||
0010 | 40 01 00 00 BE E4 12 D7 F2 FF EB DA 55 A0 62 61
|
0010 | 40 01 00 00 BE E4 12 D7 88 A0 0C B2 64 2E 0D CC
|
||||||
0020 | 90 B6 57 AC CD F3 9C 05 C8 97 E4 83 8C 1A 47 33
|
0020 | D6 BD 55 3F 42 43 30 B4 8A 33 80 8D 1D 5B AE E2
|
||||||
0030 | D9 43 AB 98 93 64 1F B4 04 45 6D 69 FD 00 00 00
|
0030 | 7E 2D 08 4D AB 67 CE D0 04 41 27 77 4B 00 00 00
|
||||||
0040 | 04 4E 94 76 C3 00 00 00 85 FD 64 DE 85 1D 9D D0
|
0040 | 04 65 E4 43 17 00 00 00 85 FD 64 DE 85 1D 9D D0
|
||||||
0050 | FE 00 01 00 35 0F 55 A0 31 39 C6 65 B4 C0 3D 92
|
0050 | FE 00 01 00 61 9B 47 27 00 90 01 B4 40 82 01 3B
|
||||||
0060 | B4 E0 2D 81 AB 71 F6 B7 BE 05 CA DB FA E6 78 22
|
0060 | 87 31 01 1A 98 4F 70 8C D5 D0 C2 53 FF 48 BD B3
|
||||||
0070 | 3B 0D BB 53 19 2D 60 A9 AD 6A 9E 1A 36 EC 9E E3
|
0070 | DF AF A2 63 7F FA 25 B4 0B 4C 4B FB 28 50 4D E7
|
||||||
0080 | 3A 69 B7 AC D9 65 E4 88 C3 EC B8 59 DC 7D CA F9
|
0080 | B3 F0 06 6D 68 95 B7 9B 7C 29 B3 F7 4A 53 58 49
|
||||||
0090 | 30 3F 24 BA 38 55 6E C7 58 4A E5 44 8A 97 9B F7
|
0090 | 3E 28 D7 3D 3B 0D 14 D5 31 EF 6A 1A 42 70 C5 93
|
||||||
00A0 | 0F 03 1E BD 21 9F 37 95 20 9A 2D 07 A4 E0 9D EF
|
00A0 | E8 D1 0E B3 B2 46 AE 66 8D A9 4B 2F 65 F3 CC 4E
|
||||||
00B0 | 29 63 84 58 CF 1A 37 98 D5 94 83 C8 F7 C8 FA 0D
|
00B0 | 63 BD 6A A5 43 B5 43 E5 13 27 D4 26 B9 83 BD 2E
|
||||||
00C0 | 24 FE 31 67 6E 8A E9 D8 AB 10 AA 7C 07 02 A1 6C
|
00C0 | 1A 64 CD B6 E6 97 C9 BA 46 71 DD CC CA FE C5 41
|
||||||
00D0 | C2 E0 96 C8 61 70 0D 07 3E 51 31 E7 16 A9 8F E1
|
00D0 | 71 68 62 CB DA 37 A8 A1 F3 67 8C C7 5C E9 E5 64
|
||||||
00E0 | 05 1A D5 85 26 F1 F1 51 AD AD D2 E1 9F 53 7E 71
|
00E0 | F0 A6 A1 9E AB DF B9 4E FB 41 CB DB 58 66 11 75
|
||||||
00F0 | 6C D5 55 83 30 DE DD E1 D4 9B E5 0A C2 0C E6 A0
|
00F0 | 7F 7E EF FA D4 7B 62 C9 A6 59 31 07 9D FD 9E CA
|
||||||
0100 | 40 82 3E B4 97 03 7B 49 FC A1 65 49 47 9A 4E 7A
|
0100 | F4 A4 51 D8 47 04 91 FE C1 E5 EA C6 BB 92 D2 F6
|
||||||
0110 | F3 D3 49 B9 07 E7 1F D3 2E 67 5B 48 7C B7 99 58
|
0110 | E7 D4 B7 41 85 27 C4 86 47 81 59 F8 67 59 14 22
|
||||||
0120 | 33 61 9B 81 85 F1 DC DA FD 73 09 30 2B 08 29 C1
|
0120 | ED 71 30 CA 98 D5 B2 74 EB EB B1 39 EA 35 79 A6
|
||||||
0130 | 8B 04 9C C7 96 F4 DC 7A 79 CE 49 D6 14 A9 23 04
|
0130 | A8 11 13 A3 A7 09 21 38 88 98 D1 8A 4F 5B 56 E8
|
||||||
0140 | D6 7E A4 4A 1B 57 E7 0F A8 94 41 BD E0 DA 58 48
|
0140 | 93 1D 42 21 08 29 2B 1B E3 E8 DD 4F EB 59 E6 C8
|
||||||
0150 | 4A AC B6 66</code></pre>
|
0150 | B5 30 AE 54</code></pre>
|
||||||
<p>Payload (de)serialization:</p>
|
<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>
|
<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">
|
<table class="table">
|
||||||
|
@ -345,7 +345,7 @@ random_padding_bytes = BE3707A89AE9B01B20AFBF2DFE2469A511655C0B8BC61714EB603611A
|
||||||
<tr>
|
<tr>
|
||||||
<td>message_id</td>
|
<td>message_id</td>
|
||||||
<td>8, 8</td>
|
<td>8, 8</td>
|
||||||
<td><code>B49A0300DDA63867</code></td>
|
<td><code>D0C4070009A93867</code></td>
|
||||||
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() << 32) + (N*4)</td>
|
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() << 32) + (N*4)</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -363,25 +363,25 @@ random_padding_bytes = BE3707A89AE9B01B20AFBF2DFE2469A511655C0B8BC61714EB603611A
|
||||||
<tr>
|
<tr>
|
||||||
<td>nonce</td>
|
<td>nonce</td>
|
||||||
<td>24, 16</td>
|
<td>24, 16</td>
|
||||||
<td><code>F2FFEBDA55A0626190B657ACCDF39C05</code></td>
|
<td><code>88A00CB2642E0DCCD6BD553F424330B4</code></td>
|
||||||
<td>Value generated by client in Step 1</td>
|
<td>Value generated by client in Step 1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>server_nonce</td>
|
<td>server_nonce</td>
|
||||||
<td>40, 16</td>
|
<td>40, 16</td>
|
||||||
<td><code>C897E4838C1A4733D943AB9893641FB4</code></td>
|
<td><code>8A33808D1D5BAEE27E2D084DAB67CED0</code></td>
|
||||||
<td>Value received from server in Step 2</td>
|
<td>Value received from server in Step 2</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>p</td>
|
<td>p</td>
|
||||||
<td>56, 8</td>
|
<td>56, 8</td>
|
||||||
<td><code>04456D69FD000000</code><br>TL byte deserialization <br>=> bigendian conversion to decimal<br>=> 1164798461</td>
|
<td><code>044127774B000000</code><br>TL byte deserialization <br>=> bigendian conversion to decimal<br>=> 1093105483</td>
|
||||||
<td>First prime cofactor: single-byte prefix denoting length, 4-byte string, and three bytes of padding</td>
|
<td>First prime cofactor: single-byte prefix denoting length, 4-byte string, and three bytes of padding</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>q</td>
|
<td>q</td>
|
||||||
<td>64, 8</td>
|
<td>64, 8</td>
|
||||||
<td><code>044E9476C3000000</code><br>TL byte deserialization <br>=> bigendian conversion to decimal<br>=> 1318352579</td>
|
<td><code>0465E44317000000</code><br>TL byte deserialization <br>=> bigendian conversion to decimal<br>=> 1709458199</td>
|
||||||
<td>Second prime cofactor: single-byte prefix denoting length, 4-byte string, and three bytes of padding</td>
|
<td>Second prime cofactor: single-byte prefix denoting length, 4-byte string, and three bytes of padding</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -393,7 +393,7 @@ random_padding_bytes = BE3707A89AE9B01B20AFBF2DFE2469A511655C0B8BC61714EB603611A
|
||||||
<tr>
|
<tr>
|
||||||
<td>encrypted_data</td>
|
<td>encrypted_data</td>
|
||||||
<td>80, 260</td>
|
<td>80, 260</td>
|
||||||
<td><code>FE000100350F55A03139C665B4C03D92</code> <code>B4E02D81AB71F6B7BE05CADBFAE67822</code> <code>3B0DBB53192D60A9AD6A9E1A36EC9EE3</code> <code>3A69B7ACD965E488C3ECB859DC7DCAF9</code> <code>303F24BA38556EC7584AE5448A979BF7</code> <code>0F031EBD219F3795209A2D07A4E09DEF</code> <code>29638458CF1A3798D59483C8F7C8FA0D</code> <code>24FE31676E8AE9D8AB10AA7C0702A16C</code> <code>C2E096C861700D073E5131E716A98FE1</code> <code>051AD58526F1F151ADADD2E19F537E71</code> <code>6CD5558330DEDDE1D49BE50AC20CE6A0</code> <code>40823EB497037B49FCA16549479A4E7A</code> <code>F3D349B907E71FD32E675B487CB79958</code> <code>33619B8185F1DCDAFD7309302B0829C1</code> <code>8B049CC796F4DC7A79CE49D614A92304</code> <code>D67EA44A1B57E70FA89441BDE0DA5848</code><br> <code>4AACB666</code></td>
|
<td><code>FE000100619B4727009001B44082013B</code> <code>8731011A984F708CD5D0C253FF48BDB3</code> <code>DFAFA2637FFA25B40B4C4BFB28504DE7</code> <code>B3F0066D6895B79B7C29B3F74A535849</code> <code>3E28D73D3B0D14D531EF6A1A4270C593</code> <code>E8D10EB3B246AE668DA94B2F65F3CC4E</code> <code>63BD6AA543B543E51327D426B983BD2E</code> <code>1A64CDB6E697C9BA4671DDCCCAFEC541</code> <code>716862CBDA37A8A1F3678CC75CE9E564</code> <code>F0A6A19EABDFB94EFB41CBDB58661175</code> <code>7F7EEFFAD47B62C9A65931079DFD9ECA</code> <code>F4A451D8470491FEC1E5EAC6BB92D2F6</code> <code>E7D4B7418527C486478159F867591422</code> <code>ED7130CA98D5B274EBEBB139EA3579A6</code> <code>A81113A3A70921388898D18A4F5B56E8</code> <code>931D422108292B1BE3E8DD4FEB59E6C8</code><br> <code>B530AE54</code></td>
|
||||||
<td>Value generated above</td>
|
<td>Value generated above</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
@ -402,47 +402,47 @@ random_padding_bytes = BE3707A89AE9B01B20AFBF2DFE2469A511655C0B8BC61714EB603611A
|
||||||
<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>
|
<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 -->
|
<!-- start server_DH_params_ok -->
|
||||||
<p>Received payload (excluding transport headers/trailers):</p>
|
<p>Received payload (excluding transport headers/trailers):</p>
|
||||||
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 CC BA 07 DE A6 38 67
|
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 80 DD F7 09 A9 38 67
|
||||||
0010 | 78 02 00 00 5C 07 E8 D0 F2 FF EB DA 55 A0 62 61
|
0010 | 78 02 00 00 5C 07 E8 D0 88 A0 0C B2 64 2E 0D CC
|
||||||
0020 | 90 B6 57 AC CD F3 9C 05 C8 97 E4 83 8C 1A 47 33
|
0020 | D6 BD 55 3F 42 43 30 B4 8A 33 80 8D 1D 5B AE E2
|
||||||
0030 | D9 43 AB 98 93 64 1F B4 FE 50 02 00 CC E5 AA 8B
|
0030 | 7E 2D 08 4D AB 67 CE D0 FE 50 02 00 DB 11 E8 39
|
||||||
0040 | 5B 16 C7 C7 A2 8D A6 86 A2 FD 61 D3 51 32 D4 B9
|
0040 | 12 F4 51 CC E9 CC B5 A4 E2 71 95 CE 8D 9C 5E 74
|
||||||
0050 | 46 46 84 68 68 C8 E4 6F C7 C7 D5 E6 A2 3F 30 6D
|
0050 | E8 79 AF 4B 91 80 40 0A 83 69 D0 27 7E 0A B8 DF
|
||||||
0060 | B5 15 8C 7D D2 F7 FC C0 12 84 12 04 8B D2 90 47
|
0060 | 51 B5 3A EC 1C 2C 6E D2 D4 DA D5 40 FA 7E E1 B4
|
||||||
0070 | FD 7C 46 57 09 B5 3E 99 E4 5E 6F 31 46 1B 93 59
|
0070 | B7 55 A1 E8 BA 3D BF 75 4D 81 6D 46 90 6B B5 4E
|
||||||
0080 | 64 7B AD 71 CA 63 8B 20 56 F5 E7 7F 60 2D 87 74
|
0080 | 26 CD 79 8D 2A 33 CB 3B 3C FD 32 23 19 5F CD AB
|
||||||
0090 | 50 CC 8F FD 1D 00 D4 1A CB 77 52 23 CB BB 82 FF
|
0090 | D5 74 3A B4 2E D4 26 62 35 50 38 FE 07 A9 2B 4A
|
||||||
00A0 | B5 2D 1F BB B4 91 81 D7 7A 16 E2 11 18 CB A5 99
|
00A0 | 60 21 ED F2 A7 0A 86 5A DF DD 55 6A 93 23 EE 52
|
||||||
00B0 | BD 7B F0 0B 4A 29 6E 70 FF 08 75 A3 BA 02 93 8A
|
00B0 | 6B 77 52 9D CA 6E CC 60 21 AB 76 B6 B2 9B 8D 42
|
||||||
00C0 | 8B 8A ED A7 22 44 2E 97 8F FA C5 E9 1F 0C BA ED
|
00C0 | 32 35 49 CF 73 81 96 55 87 FF EC C1 B4 23 43 A6
|
||||||
00D0 | 01 4E B0 DF A1 5C 10 A3 90 FE 07 D8 88 F7 3D C0
|
00D0 | 90 B0 4A 4B FA 53 C3 B3 BF 61 80 AD 85 CB B4 72
|
||||||
00E0 | 25 B6 1F 89 D0 B0 23 2E A4 9F CA 25 78 EB 77 99
|
00E0 | BA 83 60 70 70 4F 54 07 A3 50 CC E6 E9 43 76 FE
|
||||||
00F0 | 2F 35 B2 FC 45 8F 50 5D 43 DC 83 5B C3 8A 2C 4B
|
00F0 | BE 9D 92 F9 04 D5 1E 04 9A 12 F6 63 4E 0E A7 75
|
||||||
0100 | 5A FE 0C 72 5B 3B 7C 0E 0D 07 DB 18 D3 F9 C9 A8
|
0100 | 2C B2 AD 56 06 70 1F CD 2A CF 43 3A 7A 78 20 F6
|
||||||
0110 | 39 34 9F A9 5F 11 48 1C AD 66 1C 6E 58 85 E5 80
|
0110 | B9 4D 44 C0 FB 3D 9D EF 73 F6 AD 93 E4 A3 6C 2F
|
||||||
0120 | D2 C7 A1 B7 BF A7 79 C1 4E 09 9C 44 B2 5F 01 63
|
0120 | AA 3E 22 40 C8 2C E2 A4 2D 72 21 28 E6 89 01 5D
|
||||||
0130 | F4 87 78 02 6D AF CA 02 1A F8 42 18 3F 02 AB 9E
|
0130 | C9 5B 41 42 CD 09 BA 46 4D 9E A6 79 AA 70 86 0E
|
||||||
0140 | 42 3A 76 D4 92 67 83 BA 24 0D 23 42 52 1B CC 48
|
0140 | A7 BC 95 93 15 3C 6F E4 20 83 2F A7 8C 2C C4 31
|
||||||
0150 | D7 BC 7F 95 B3 3E E7 32 FF 2E 90 40 74 86 C4 DA
|
0150 | 2F A6 A8 1E BD BD 61 22 43 B5 27 1B B2 ED CB 2F
|
||||||
0160 | 4F 98 B0 A0 65 CF A6 DA BA F7 45 77 D4 2A 4F 12
|
0160 | 64 29 28 90 25 2E AE C0 F6 E7 3C 5D A0 CF D8 A2
|
||||||
0170 | 86 13 78 F4 79 9B 5C A7 6C 48 AF 2B DA 6F 4D A4
|
0170 | 20 BB E2 F6 5A C3 CA E6 59 82 95 B5 42 30 CD 85
|
||||||
0180 | 1E 6F 71 03 73 FA 5B 82 99 A9 AC 43 BC 6B 38 DA
|
0180 | F3 26 9A 95 FD FE E3 AE 04 C7 FE AC 11 34 BE 51
|
||||||
0190 | 72 D3 ED CB 09 32 D6 A5 D6 49 E4 D6 14 FA 1D 3F
|
0190 | 8E C7 BC AB 99 72 B4 9A 58 DB F3 8F D2 FF 60 92
|
||||||
01A0 | 86 F9 7D 5F 3B D5 5C 10 6C 49 1C C6 8C 37 A8 24
|
01A0 | 9E 6C BB 3A 95 CE 10 15 FD 92 77 59 A8 0D 69 D2
|
||||||
01B0 | 28 78 C5 85 EA E6 1F 66 1D FC 09 5C 9F 15 8B 7A
|
01B0 | 8B 90 43 05 98 62 F7 3B 17 14 11 6A 4D 48 08 29
|
||||||
01C0 | B0 F9 0D 6B A9 70 65 1D 0F E6 86 42 71 18 48 2D
|
01C0 | C8 C4 20 3F 6F 9D DD 34 AE 9F 5F A9 5A 0B 1F 64
|
||||||
01D0 | 96 30 5A 4D F8 33 F6 6C 3E 2B F9 52 23 4E 31 88
|
01D0 | D6 34 AB 3B BF 18 EC 74 66 D5 24 DA D7 35 4D 2E
|
||||||
01E0 | D1 A3 B6 30 37 48 19 58 BB 97 DE 43 CA 62 1C 78
|
01E0 | 95 7E 3B 30 92 06 A8 EA 67 41 92 F5 6B 5E A3 C6
|
||||||
01F0 | E1 E2 A0 3D 68 4F AC 4E D9 A5 B2 14 56 F0 B7 BF
|
01F0 | 3B B5 F4 56 62 80 1D 42 26 1E D8 0F 40 12 59 25
|
||||||
0200 | 6C 5A 47 21 9A F9 FA AC D1 00 DD 5B 0B E3 C3 88
|
0200 | 11 8D 6A 4D 56 0D 24 30 C8 BA 3E 89 FF E5 3B 29
|
||||||
0210 | 3E C9 93 72 51 92 B8 97 FF D3 DA 0C 5A B7 75 BE
|
0210 | 20 52 B9 49 26 4C C9 87 23 BF F1 50 DC 65 E5 FF
|
||||||
0220 | FB 83 22 83 A9 02 E6 F6 FF 0D FF 5B 45 1F AB 3C
|
0220 | 2A F6 06 3A 7B E5 20 50 D7 10 9C F3 31 01 6F 6B
|
||||||
0230 | 7A 7C F3 A0 47 C1 1F 86 87 39 7B DB 24 BE C9 04
|
0230 | E2 E9 E8 FE 32 19 1C 4D B9 A5 B3 FB C1 6A B5 A2
|
||||||
0240 | 53 26 62 74 BC 52 CE A4 59 29 3A 54 99 80 D0 E2
|
0240 | 87 F9 D2 5C 69 22 5B 4B 89 40 A0 D4 A3 E6 2D DB
|
||||||
0250 | 55 F4 59 16 BA 91 FB 33 38 C5 0C B1 7F AE E9 C1
|
0250 | 67 8B B1 A4 42 FB 71 55 1D 6B 43 F7 49 AD 46 EB
|
||||||
0260 | F6 F0 DE 9C 67 68 F9 D3 73 60 DE 5D E4 88 62 BD
|
0260 | F5 3D 32 27 41 83 4B 5C 2E D3 EA 3A 14 A5 5C AC
|
||||||
0270 | F9 E6 72 54 A2 7C 2D F5 6C D8 86 7A 00 A7 03 E8
|
0270 | E0 21 4D 1C E5 25 CD C9 39 9B 1C A2 40 8C BF BC
|
||||||
0280 | BE 5D 32 8C C7 EE 2B 45 90 54 FA AC</code></pre>
|
0280 | 70 83 63 2F BD 93 45 E5 DD 25 B7 A3</code></pre>
|
||||||
<p>Payload (de)serialization:</p>
|
<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>
|
<pre><code>server_DH_params_ok#d0e8075c nonce:int128 server_nonce:int128 encrypted_answer:string = Server_DH_Params;</code></pre>
|
||||||
<table class="table">
|
<table class="table">
|
||||||
|
@ -464,7 +464,7 @@ random_padding_bytes = BE3707A89AE9B01B20AFBF2DFE2469A511655C0B8BC61714EB603611A
|
||||||
<tr>
|
<tr>
|
||||||
<td>message_id</td>
|
<td>message_id</td>
|
||||||
<td>8, 8</td>
|
<td>8, 8</td>
|
||||||
<td><code>01CCBA07DEA63867</code></td>
|
<td><code>0180DDF709A93867</code></td>
|
||||||
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() << 32) + (N*4)</td>
|
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() << 32) + (N*4)</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -482,19 +482,19 @@ random_padding_bytes = BE3707A89AE9B01B20AFBF2DFE2469A511655C0B8BC61714EB603611A
|
||||||
<tr>
|
<tr>
|
||||||
<td>nonce</td>
|
<td>nonce</td>
|
||||||
<td>24, 16</td>
|
<td>24, 16</td>
|
||||||
<td><code>F2FFEBDA55A0626190B657ACCDF39C05</code></td>
|
<td><code>88A00CB2642E0DCCD6BD553F424330B4</code></td>
|
||||||
<td>Value generated by client in Step 1</td>
|
<td>Value generated by client in Step 1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>server_nonce</td>
|
<td>server_nonce</td>
|
||||||
<td>40, 16</td>
|
<td>40, 16</td>
|
||||||
<td><code>C897E4838C1A4733D943AB9893641FB4</code></td>
|
<td><code>8A33808D1D5BAEE27E2D084DAB67CED0</code></td>
|
||||||
<td>Value received from server in Step 2</td>
|
<td>Value received from server in Step 2</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>encrypted_answer</td>
|
<td>encrypted_answer</td>
|
||||||
<td>56, 596</td>
|
<td>56, 596</td>
|
||||||
<td><code>FE500200CCE5AA8B5B16C7C7A28DA686</code> <code>A2FD61D35132D4B94646846868C8E46F</code> <code>C7C7D5E6A23F306DB5158C7DD2F7FCC0</code> <code>128412048BD29047FD7C465709B53E99</code> <code>E45E6F31461B9359647BAD71CA638B20</code> <code>56F5E77F602D877450CC8FFD1D00D41A</code> <code>CB775223CBBB82FFB52D1FBBB49181D7</code> <code>7A16E21118CBA599BD7BF00B4A296E70</code> <code>FF0875A3BA02938A8B8AEDA722442E97</code> <code>8FFAC5E91F0CBAED014EB0DFA15C10A3</code> <code>90FE07D888F73DC025B61F89D0B0232E</code> <code>A49FCA2578EB77992F35B2FC458F505D</code> <code>43DC835BC38A2C4B5AFE0C725B3B7C0E</code> <code>0D07DB18D3F9C9A839349FA95F11481C</code> <code>AD661C6E5885E580D2C7A1B7BFA779C1</code> <code>4E099C44B25F0163F48778026DAFCA02</code> <code>1AF842183F02AB9E423A76D4926783BA</code> <code>240D2342521BCC48D7BC7F95B33EE732</code> <code>FF2E90407486C4DA4F98B0A065CFA6DA</code> <code>BAF74577D42A4F12861378F4799B5CA7</code> <code>6C48AF2BDA6F4DA41E6F710373FA5B82</code> <code>99A9AC43BC6B38DA72D3EDCB0932D6A5</code> <code>D649E4D614FA1D3F86F97D5F3BD55C10</code> <code>6C491CC68C37A8242878C585EAE61F66</code> <code>1DFC095C9F158B7AB0F90D6BA970651D</code> <code>0FE686427118482D96305A4DF833F66C</code> <code>3E2BF952234E3188D1A3B63037481958</code> <code>BB97DE43CA621C78E1E2A03D684FAC4E</code> <code>D9A5B21456F0B7BF6C5A47219AF9FAAC</code> <code>D100DD5B0BE3C3883EC993725192B897</code> <code>FFD3DA0C5AB775BEFB832283A902E6F6</code> <code>FF0DFF5B451FAB3C7A7CF3A047C11F86</code> <code>87397BDB24BEC90453266274BC52CEA4</code> <code>59293A549980D0E255F45916BA91FB33</code> <code>38C50CB17FAEE9C1F6F0DE9C6768F9D3</code> <code>7360DE5DE48862BDF9E67254A27C2DF5</code> <code>6CD8867A00A703E8BE5D328CC7EE2B45</code><br> <code>9054FAAC</code></td>
|
<td><code>FE500200DB11E83912F451CCE9CCB5A4</code> <code>E27195CE8D9C5E74E879AF4B9180400A</code> <code>8369D0277E0AB8DF51B53AEC1C2C6ED2</code> <code>D4DAD540FA7EE1B4B755A1E8BA3DBF75</code> <code>4D816D46906BB54E26CD798D2A33CB3B</code> <code>3CFD3223195FCDABD5743AB42ED42662</code> <code>355038FE07A92B4A6021EDF2A70A865A</code> <code>DFDD556A9323EE526B77529DCA6ECC60</code> <code>21AB76B6B29B8D42323549CF73819655</code> <code>87FFECC1B42343A690B04A4BFA53C3B3</code> <code>BF6180AD85CBB472BA836070704F5407</code> <code>A350CCE6E94376FEBE9D92F904D51E04</code> <code>9A12F6634E0EA7752CB2AD5606701FCD</code> <code>2ACF433A7A7820F6B94D44C0FB3D9DEF</code> <code>73F6AD93E4A36C2FAA3E2240C82CE2A4</code> <code>2D722128E689015DC95B4142CD09BA46</code> <code>4D9EA679AA70860EA7BC9593153C6FE4</code> <code>20832FA78C2CC4312FA6A81EBDBD6122</code> <code>43B5271BB2EDCB2F64292890252EAEC0</code> <code>F6E73C5DA0CFD8A220BBE2F65AC3CAE6</code> <code>598295B54230CD85F3269A95FDFEE3AE</code> <code>04C7FEAC1134BE518EC7BCAB9972B49A</code> <code>58DBF38FD2FF60929E6CBB3A95CE1015</code> <code>FD927759A80D69D28B9043059862F73B</code> <code>1714116A4D480829C8C4203F6F9DDD34</code> <code>AE9F5FA95A0B1F64D634AB3BBF18EC74</code> <code>66D524DAD7354D2E957E3B309206A8EA</code> <code>674192F56B5EA3C63BB5F45662801D42</code> <code>261ED80F40125925118D6A4D560D2430</code> <code>C8BA3E89FFE53B292052B949264CC987</code> <code>23BFF150DC65E5FF2AF6063A7BE52050</code> <code>D7109CF331016F6BE2E9E8FE32191C4D</code> <code>B9A5B3FBC16AB5A287F9D25C69225B4B</code> <code>8940A0D4A3E62DDB678BB1A442FB7155</code> <code>1D6B43F749AD46EBF53D322741834B5C</code> <code>2ED3EA3A14A55CACE0214D1CE525CDC9</code> <code>399B1CA2408CBFBC7083632FBD9345E5</code><br> <code>DD25B7A3</code></td>
|
||||||
<td>See below</td>
|
<td>See below</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
@ -502,20 +502,20 @@ random_padding_bytes = BE3707A89AE9B01B20AFBF2DFE2469A511655C0B8BC61714EB603611A
|
||||||
<!-- end server_DH_params_ok -->
|
<!-- 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>
|
<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 -->
|
<!-- start server_DH_inner_data_input -->
|
||||||
<pre><code>encrypted_answer = CCE5AA8B5B16C7C7A28DA686A2FD61D35132D4B94646846868C8E46FC7C7D5E6A23F306DB5158C7DD2F7FCC0128412048BD29047FD7C465709B53E99E45E6F31461B9359647BAD71CA638B2056F5E77F602D877450CC8FFD1D00D41ACB775223CBBB82FFB52D1FBBB49181D77A16E21118CBA599BD7BF00B4A296E70FF0875A3BA02938A8B8AEDA722442E978FFAC5E91F0CBAED014EB0DFA15C10A390FE07D888F73DC025B61F89D0B0232EA49FCA2578EB77992F35B2FC458F505D43DC835BC38A2C4B5AFE0C725B3B7C0E0D07DB18D3F9C9A839349FA95F11481CAD661C6E5885E580D2C7A1B7BFA779C14E099C44B25F0163F48778026DAFCA021AF842183F02AB9E423A76D4926783BA240D2342521BCC48D7BC7F95B33EE732FF2E90407486C4DA4F98B0A065CFA6DABAF74577D42A4F12861378F4799B5CA76C48AF2BDA6F4DA41E6F710373FA5B8299A9AC43BC6B38DA72D3EDCB0932D6A5D649E4D614FA1D3F86F97D5F3BD55C106C491CC68C37A8242878C585EAE61F661DFC095C9F158B7AB0F90D6BA970651D0FE686427118482D96305A4DF833F66C3E2BF952234E3188D1A3B63037481958BB97DE43CA621C78E1E2A03D684FAC4ED9A5B21456F0B7BF6C5A47219AF9FAACD100DD5B0BE3C3883EC993725192B897FFD3DA0C5AB775BEFB832283A902E6F6FF0DFF5B451FAB3C7A7CF3A047C11F8687397BDB24BEC90453266274BC52CEA459293A549980D0E255F45916BA91FB3338C50CB17FAEE9C1F6F0DE9C6768F9D37360DE5DE48862BDF9E67254A27C2DF56CD8867A00A703E8BE5D328CC7EE2B459054FAAC
|
<pre><code>encrypted_answer = DB11E83912F451CCE9CCB5A4E27195CE8D9C5E74E879AF4B9180400A8369D0277E0AB8DF51B53AEC1C2C6ED2D4DAD540FA7EE1B4B755A1E8BA3DBF754D816D46906BB54E26CD798D2A33CB3B3CFD3223195FCDABD5743AB42ED42662355038FE07A92B4A6021EDF2A70A865ADFDD556A9323EE526B77529DCA6ECC6021AB76B6B29B8D42323549CF7381965587FFECC1B42343A690B04A4BFA53C3B3BF6180AD85CBB472BA836070704F5407A350CCE6E94376FEBE9D92F904D51E049A12F6634E0EA7752CB2AD5606701FCD2ACF433A7A7820F6B94D44C0FB3D9DEF73F6AD93E4A36C2FAA3E2240C82CE2A42D722128E689015DC95B4142CD09BA464D9EA679AA70860EA7BC9593153C6FE420832FA78C2CC4312FA6A81EBDBD612243B5271BB2EDCB2F64292890252EAEC0F6E73C5DA0CFD8A220BBE2F65AC3CAE6598295B54230CD85F3269A95FDFEE3AE04C7FEAC1134BE518EC7BCAB9972B49A58DBF38FD2FF60929E6CBB3A95CE1015FD927759A80D69D28B9043059862F73B1714116A4D480829C8C4203F6F9DDD34AE9F5FA95A0B1F64D634AB3BBF18EC7466D524DAD7354D2E957E3B309206A8EA674192F56B5EA3C63BB5F45662801D42261ED80F40125925118D6A4D560D2430C8BA3E89FFE53B292052B949264CC98723BFF150DC65E5FF2AF6063A7BE52050D7109CF331016F6BE2E9E8FE32191C4DB9A5B3FBC16AB5A287F9D25C69225B4B8940A0D4A3E62DDB678BB1A442FB71551D6B43F749AD46EBF53D322741834B5C2ED3EA3A14A55CACE0214D1CE525CDC9399B1CA2408CBFBC7083632FBD9345E5DD25B7A3
|
||||||
tmp_aes_key = 594061AE8790464CD895F4EC6E87183395A1D3030D30F301DC4BEA649F715D0E
|
tmp_aes_key = 010C0C9B7A484D3A0D5BE8A9D860F7037247338A949243ABFD2598EA8BAFE4D1
|
||||||
tmp_aes_iv = 4D77BC1E9C065F093B95359EA200FB0DBB6499A2A2356E2764FA3EC11183DF59</code></pre>
|
tmp_aes_iv = E9737E2AA80D0D0FC0161512F6069DF0654F7B84D8A2C4679359DF78C61C4CB1</code></pre>
|
||||||
<!-- end server_DH_inner_data_input -->
|
<!-- end server_DH_inner_data_input -->
|
||||||
<p>Yielding:</p>
|
<p>Yielding:</p>
|
||||||
<!-- start server_DH_inner_data_output -->
|
<!-- start server_DH_inner_data_output -->
|
||||||
<pre><code>answer_with_hash = 8EC374A6E5C8D1351060184DB3D5F334AD204BE5BA0D89B5F2FFEBDA55A0626190B657ACCDF39C05C897E4838C1A4733D943AB9893641FB403000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE00010047BFBF1B479D5A20E74889EF9CEECE80F9135067904A56B6EF0C4A30374085607A674D2C84C442956816AC2A72F835BAE1DDE4CB1735741A9306529EA3C143B85977FA6E2B2187F1F26ECF6D20281FC0AD417084F3DD54DE11ADE3DB7D3D9260184537FF353F4B0D02421D41B9F10A6DD2025F5637D5AB7A3115B9238F83E1BE9029A0FC444E5F516EC3E4E7508F12209ED9ED543E8BDF86B12F878C7DD35FAF9175234AA78D92A8AA4AD4AB38951F26A7AB03B00B5697C40587D31A320F1A87A8C6F6D5ACC40B04C0D4C927658C40CC014FC2FF678B78F818AA961B4AB61D7ADFD6E68BB3B180027FCF76D164852891E16CDAD45209B9EC8FA7D26E409E75E7DEA63867AEE470C76CBBBB02
|
<pre><code>answer_with_hash = 7FC0273CC2008BCABACC587CFFDEA36CC61A2195BA0D89B588A00CB2642E0DCCD6BD553F424330B48A33808D1D5BAEE27E2D084DAB67CED003000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100793E8C3BC9C45F094D11A4277C747A11D65D3B6F5C97D8320D4BE76ABF41C4D8EFB57AFE6B0C1C7E7A5F073BA509FADE1E20DEFE69CBEC0864C94A9778B40FD57EEBBCEDA4E088AA20C71F5F289E8CC4D202DF73C621BBDFA750255F05518CAE0E58EE6EA7A0319A5B23CBDE0B146EABE42B7022AA71074D6E9164063ABA342920779D5D253FB48EB9B9BDA2A9EF56833829FE1FB199ACDC85C853D97FE9D0B69159A4826777C28AB3024D1C41F9FF53815ACB7E3105D3E21AAB984CC110498298E55BEDE751A3E7ECD357D884ACA32F6E2E0CA121FDD7792B9C3E9D19B685AEE66EA166BCED647F2BF6F036C9B6513B2D95BD6E411B46EC9F21916CD1259B5809A938674022F989DA20AE22
|
||||||
answer = BA0D89B5F2FFEBDA55A0626190B657ACCDF39C05C897E4838C1A4733D943AB9893641FB403000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE00010047BFBF1B479D5A20E74889EF9CEECE80F9135067904A56B6EF0C4A30374085607A674D2C84C442956816AC2A72F835BAE1DDE4CB1735741A9306529EA3C143B85977FA6E2B2187F1F26ECF6D20281FC0AD417084F3DD54DE11ADE3DB7D3D9260184537FF353F4B0D02421D41B9F10A6DD2025F5637D5AB7A3115B9238F83E1BE9029A0FC444E5F516EC3E4E7508F12209ED9ED543E8BDF86B12F878C7DD35FAF9175234AA78D92A8AA4AD4AB38951F26A7AB03B00B5697C40587D31A320F1A87A8C6F6D5ACC40B04C0D4C927658C40CC014FC2FF678B78F818AA961B4AB61D7ADFD6E68BB3B180027FCF76D164852891E16CDAD45209B9EC8FA7D26E409E75E7DEA63867AEE470C76CBBBB02</code></pre>
|
answer = BA0D89B588A00CB2642E0DCCD6BD553F424330B48A33808D1D5BAEE27E2D084DAB67CED003000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100793E8C3BC9C45F094D11A4277C747A11D65D3B6F5C97D8320D4BE76ABF41C4D8EFB57AFE6B0C1C7E7A5F073BA509FADE1E20DEFE69CBEC0864C94A9778B40FD57EEBBCEDA4E088AA20C71F5F289E8CC4D202DF73C621BBDFA750255F05518CAE0E58EE6EA7A0319A5B23CBDE0B146EABE42B7022AA71074D6E9164063ABA342920779D5D253FB48EB9B9BDA2A9EF56833829FE1FB199ACDC85C853D97FE9D0B69159A4826777C28AB3024D1C41F9FF53815ACB7E3105D3E21AAB984CC110498298E55BEDE751A3E7ECD357D884ACA32F6E2E0CA121FDD7792B9C3E9D19B685AEE66EA166BCED647F2BF6F036C9B6513B2D95BD6E411B46EC9F21916CD1259B5809A938674022F989DA20AE22</code></pre>
|
||||||
<!-- end server_DH_inner_data_output -->
|
<!-- end server_DH_inner_data_output -->
|
||||||
<!-- start server_DH_inner_data -->
|
<!-- start server_DH_inner_data -->
|
||||||
<p>Generated payload (excluding transport headers/trailers):</p>
|
<p>Generated payload (excluding transport headers/trailers):</p>
|
||||||
<pre><code>0000 | BA 0D 89 B5 F2 FF EB DA 55 A0 62 61 90 B6 57 AC
|
<pre><code>0000 | BA 0D 89 B5 88 A0 0C B2 64 2E 0D CC D6 BD 55 3F
|
||||||
0010 | CD F3 9C 05 C8 97 E4 83 8C 1A 47 33 D9 43 AB 98
|
0010 | 42 43 30 B4 8A 33 80 8D 1D 5B AE E2 7E 2D 08 4D
|
||||||
0020 | 93 64 1F B4 03 00 00 00 FE 00 01 00 C7 1C AE B9
|
0020 | AB 67 CE D0 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
|
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
|
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
|
0050 | A7 C1 40 58 22 94 93 D2 25 30 F4 DB FA 33 6F 6E
|
||||||
|
@ -532,23 +532,23 @@ answer = BA0D89B5F2FFEBDA55A0626190B657ACCDF39C05C897E4838C1A4733D943AB9893641FB
|
||||||
0100 | F4 7B F9 59 D9 56 85 0C E9 29 85 1F 0D 81 15 F6
|
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
|
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
|
0120 | 34 B1 04 03 11 9C D8 E3 B9 2F CC 5B FE 00 01 00
|
||||||
0130 | 47 BF BF 1B 47 9D 5A 20 E7 48 89 EF 9C EE CE 80
|
0130 | 79 3E 8C 3B C9 C4 5F 09 4D 11 A4 27 7C 74 7A 11
|
||||||
0140 | F9 13 50 67 90 4A 56 B6 EF 0C 4A 30 37 40 85 60
|
0140 | D6 5D 3B 6F 5C 97 D8 32 0D 4B E7 6A BF 41 C4 D8
|
||||||
0150 | 7A 67 4D 2C 84 C4 42 95 68 16 AC 2A 72 F8 35 BA
|
0150 | EF B5 7A FE 6B 0C 1C 7E 7A 5F 07 3B A5 09 FA DE
|
||||||
0160 | E1 DD E4 CB 17 35 74 1A 93 06 52 9E A3 C1 43 B8
|
0160 | 1E 20 DE FE 69 CB EC 08 64 C9 4A 97 78 B4 0F D5
|
||||||
0170 | 59 77 FA 6E 2B 21 87 F1 F2 6E CF 6D 20 28 1F C0
|
0170 | 7E EB BC ED A4 E0 88 AA 20 C7 1F 5F 28 9E 8C C4
|
||||||
0180 | AD 41 70 84 F3 DD 54 DE 11 AD E3 DB 7D 3D 92 60
|
0180 | D2 02 DF 73 C6 21 BB DF A7 50 25 5F 05 51 8C AE
|
||||||
0190 | 18 45 37 FF 35 3F 4B 0D 02 42 1D 41 B9 F1 0A 6D
|
0190 | 0E 58 EE 6E A7 A0 31 9A 5B 23 CB DE 0B 14 6E AB
|
||||||
01A0 | D2 02 5F 56 37 D5 AB 7A 31 15 B9 23 8F 83 E1 BE
|
01A0 | E4 2B 70 22 AA 71 07 4D 6E 91 64 06 3A BA 34 29
|
||||||
01B0 | 90 29 A0 FC 44 4E 5F 51 6E C3 E4 E7 50 8F 12 20
|
01B0 | 20 77 9D 5D 25 3F B4 8E B9 B9 BD A2 A9 EF 56 83
|
||||||
01C0 | 9E D9 ED 54 3E 8B DF 86 B1 2F 87 8C 7D D3 5F AF
|
01C0 | 38 29 FE 1F B1 99 AC DC 85 C8 53 D9 7F E9 D0 B6
|
||||||
01D0 | 91 75 23 4A A7 8D 92 A8 AA 4A D4 AB 38 95 1F 26
|
01D0 | 91 59 A4 82 67 77 C2 8A B3 02 4D 1C 41 F9 FF 53
|
||||||
01E0 | A7 AB 03 B0 0B 56 97 C4 05 87 D3 1A 32 0F 1A 87
|
01E0 | 81 5A CB 7E 31 05 D3 E2 1A AB 98 4C C1 10 49 82
|
||||||
01F0 | A8 C6 F6 D5 AC C4 0B 04 C0 D4 C9 27 65 8C 40 CC
|
01F0 | 98 E5 5B ED E7 51 A3 E7 EC D3 57 D8 84 AC A3 2F
|
||||||
0200 | 01 4F C2 FF 67 8B 78 F8 18 AA 96 1B 4A B6 1D 7A
|
0200 | 6E 2E 0C A1 21 FD D7 79 2B 9C 3E 9D 19 B6 85 AE
|
||||||
0210 | DF D6 E6 8B B3 B1 80 02 7F CF 76 D1 64 85 28 91
|
0210 | E6 6E A1 66 BC ED 64 7F 2B F6 F0 36 C9 B6 51 3B
|
||||||
0220 | E1 6C DA D4 52 09 B9 EC 8F A7 D2 6E 40 9E 75 E7
|
0220 | 2D 95 BD 6E 41 1B 46 EC 9F 21 91 6C D1 25 9B 58
|
||||||
0230 | DE A6 38 67</code></pre>
|
0230 | 09 A9 38 67</code></pre>
|
||||||
<p>Payload (de)serialization:</p>
|
<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>
|
<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">
|
<table class="table">
|
||||||
|
@ -570,13 +570,13 @@ answer = BA0D89B5F2FFEBDA55A0626190B657ACCDF39C05C897E4838C1A4733D943AB9893641FB
|
||||||
<tr>
|
<tr>
|
||||||
<td>nonce</td>
|
<td>nonce</td>
|
||||||
<td>4, 16</td>
|
<td>4, 16</td>
|
||||||
<td><code>F2FFEBDA55A0626190B657ACCDF39C05</code></td>
|
<td><code>88A00CB2642E0DCCD6BD553F424330B4</code></td>
|
||||||
<td>Value generated by client in Step 1</td>
|
<td>Value generated by client in Step 1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>server_nonce</td>
|
<td>server_nonce</td>
|
||||||
<td>20, 16</td>
|
<td>20, 16</td>
|
||||||
<td><code>C897E4838C1A4733D943AB9893641FB4</code></td>
|
<td><code>8A33808D1D5BAEE27E2D084DAB67CED0</code></td>
|
||||||
<td>Value received from server in Step 2</td>
|
<td>Value received from server in Step 2</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -594,13 +594,13 @@ answer = BA0D89B5F2FFEBDA55A0626190B657ACCDF39C05C897E4838C1A4733D943AB9893641FB
|
||||||
<tr>
|
<tr>
|
||||||
<td>g_a</td>
|
<td>g_a</td>
|
||||||
<td>300, 260</td>
|
<td>300, 260</td>
|
||||||
<td><code>FE00010047BFBF1B479D5A20E74889EF</code> <code>9CEECE80F9135067904A56B6EF0C4A30</code> <code>374085607A674D2C84C442956816AC2A</code> <code>72F835BAE1DDE4CB1735741A9306529E</code> <code>A3C143B85977FA6E2B2187F1F26ECF6D</code> <code>20281FC0AD417084F3DD54DE11ADE3DB</code> <code>7D3D9260184537FF353F4B0D02421D41</code> <code>B9F10A6DD2025F5637D5AB7A3115B923</code> <code>8F83E1BE9029A0FC444E5F516EC3E4E7</code> <code>508F12209ED9ED543E8BDF86B12F878C</code> <code>7DD35FAF9175234AA78D92A8AA4AD4AB</code> <code>38951F26A7AB03B00B5697C40587D31A</code> <code>320F1A87A8C6F6D5ACC40B04C0D4C927</code> <code>658C40CC014FC2FF678B78F818AA961B</code> <code>4AB61D7ADFD6E68BB3B180027FCF76D1</code> <code>64852891E16CDAD45209B9EC8FA7D26E</code><br> <code>409E75E7</code></td>
|
<td><code>FE000100793E8C3BC9C45F094D11A427</code> <code>7C747A11D65D3B6F5C97D8320D4BE76A</code> <code>BF41C4D8EFB57AFE6B0C1C7E7A5F073B</code> <code>A509FADE1E20DEFE69CBEC0864C94A97</code> <code>78B40FD57EEBBCEDA4E088AA20C71F5F</code> <code>289E8CC4D202DF73C621BBDFA750255F</code> <code>05518CAE0E58EE6EA7A0319A5B23CBDE</code> <code>0B146EABE42B7022AA71074D6E916406</code> <code>3ABA342920779D5D253FB48EB9B9BDA2</code> <code>A9EF56833829FE1FB199ACDC85C853D9</code> <code>7FE9D0B69159A4826777C28AB3024D1C</code> <code>41F9FF53815ACB7E3105D3E21AAB984C</code> <code>C110498298E55BEDE751A3E7ECD357D8</code> <code>84ACA32F6E2E0CA121FDD7792B9C3E9D</code> <code>19B685AEE66EA166BCED647F2BF6F036</code> <code>C9B6513B2D95BD6E411B46EC9F21916C</code><br> <code>D1259B58</code></td>
|
||||||
<td><code>g_a</code> diffie-hellman parameter</td>
|
<td><code>g_a</code> diffie-hellman parameter</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>server_time</td>
|
<td>server_time</td>
|
||||||
<td>560, 4</td>
|
<td>560, 4</td>
|
||||||
<td><code>DEA63867</code> (1731765982 in decimal)</td>
|
<td><code>09A93867</code> (1731766537 in decimal)</td>
|
||||||
<td>Server time</td>
|
<td>Server time</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
@ -609,34 +609,34 @@ answer = BA0D89B5F2FFEBDA55A0626190B657ACCDF39C05C897E4838C1A4733D943AB9893641FB
|
||||||
<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>
|
<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>
|
<p>First, generate a secure random 2048-bit number b:</p>
|
||||||
<!-- start b -->
|
<!-- start b -->
|
||||||
<pre><code>b = 192B33AF8896B004B5697EC9E8EDAB4C1F3D89312A51FD8FE4768D5B19AB55938FB45F9CDECAC165721285AB40E02100FC8768D54ED0C0AE5C3CEA32985EB22F112FAF76CFFE9CFF737ADEEBA9BC3498B342D6100FDD277D96F677960EDC2215527707ECAC55A1058581DF461948548D9D60714A5ED62F4CB4A1BA8DCAC0209DFA75E17D7AE8F09054442BB3EC20360665EDF5B1D67432F2AF9A761B3338CD6C31B47F78D81BD23E8548E23D5CE8AF796ECCC26D1C24E8CC7D08774C60BB1FCE5ACB3B9B6CC2B99FA72B1B2719E0107AA084FAF9BDC79A18D9B8DDBC101D6FA3C13D7D9E2F5DD127661626DD7A65148ED4135E6A19F1ADC0CA709A8A04603368</code></pre>
|
<pre><code>b = 8487CEEC95B08B349E56A2EACC775D5DB3AC7B0E231A6EFEB194B2305C10385F0DC79C589C5C38A446BB353DF4BBECFF96E2EDE7EEAC4384FBCD82CB8BC31C65FC38D69796691FDF314501CB010F486A677BB4638344DCC3A0A307F6A2F38AE1DF7B43D6BD00FF42121D15FE30B7FE307816771ECB9BCDF97E08CD0FFF783191B1FAEFECF533050252921FEA2D6DF31FFBBD62B5F836A07BCA342F2EE325D6D70706477D0E22234F25A427E561D2E276C9204E484A6F184C7462AB56DEB18A16EC4668EBCE28569275A36F59D05CD4D1D731531DD0B8633E87801DCAF5736E6BEE06C7A3AE7E47EAE3B53D35D4BB23EB1597048FFBC38A28F2B7E72D60147401</code></pre>
|
||||||
<!-- end b -->
|
<!-- end b -->
|
||||||
<p>Then compute <code>g_b = pow(g, b) mod dh_prime</code></p>
|
<p>Then compute <code>g_b = pow(g, b) mod dh_prime</code></p>
|
||||||
<!-- start g_b -->
|
<!-- start g_b -->
|
||||||
<pre><code>g_b = 35A300F632B557BCF18A927A4DE8AFFCAFF852DB2AB3F43FF3D2CC1B902B1126BD4FA49B87DE3F92184EEC68EBD16345E4D4B33C2816637FA8BECABC99C6028300E6B9304CB0A182916F6D9C865619D3993367E8FF6FC4E797C57E654A673C8712D4E07A9E64C1B4157C2C9624DF295B285BB044A45EC45CBC2A10649E02B2239072393E6AC72068136B884BBC418E024BF8A8DD12DBB534EFFF235B5E78AABB524CED3E2C18C607F9832066AF940BA10E30A299B0AC55E1B45864FA54A587D7ACE194868027A98F69595725E1AC03095E37C04861AE41BE642BB9244619509FB3453CF8325BDB0077AF51AD276D937F8618EEA693C6A116BF05B02AE956AC65</code></pre>
|
<pre><code>g_b = 6E9707456F57D1A5BA110E879B97A146952B760195EEE9B09A4416D13A60C4F3DC4F267EFB3EF6009D2E08B31E8097391583C3D63C9938D376D10A1934F2514F4C2938B7B76E3F59DA8C5B20FF08F1922A37808104CAE3DA3A395AF2EF5D4C1C9690BCE32066A1A082B88CFC5086F999AB7E847B4518EEFA8E6C2AB4E5988C93EC2EED9D264F3D297E7225921F87A70A7292F564E55F22C21116C3120ECA708B8171A690CE5E85676695669F581F702B8D99A42BBD927677AB6AEC82F714DB0C8096654171A913D91602D458F2E53BB2689F1D75BAECFAD5702447F679C2D326A67FD5A356E236018A4DC1A8315F5BD35ADDCA421A0DE3BDB4B55E2B8DA578E4</code></pre>
|
||||||
<!-- end g_b -->
|
<!-- end g_b -->
|
||||||
<h6>7.1) generation of encrypted_data</h6>
|
<h6>7.1) generation of encrypted_data</h6>
|
||||||
<!-- start client_DH_inner_data -->
|
<!-- start client_DH_inner_data -->
|
||||||
<p>Generated payload (excluding transport headers/trailers):</p>
|
<p>Generated payload (excluding transport headers/trailers):</p>
|
||||||
<pre><code>0000 | 54 B6 43 66 F2 FF EB DA 55 A0 62 61 90 B6 57 AC
|
<pre><code>0000 | 54 B6 43 66 88 A0 0C B2 64 2E 0D CC D6 BD 55 3F
|
||||||
0010 | CD F3 9C 05 C8 97 E4 83 8C 1A 47 33 D9 43 AB 98
|
0010 | 42 43 30 B4 8A 33 80 8D 1D 5B AE E2 7E 2D 08 4D
|
||||||
0020 | 93 64 1F B4 00 00 00 00 00 00 00 00 FE 00 01 00
|
0020 | AB 67 CE D0 00 00 00 00 00 00 00 00 FE 00 01 00
|
||||||
0030 | 35 A3 00 F6 32 B5 57 BC F1 8A 92 7A 4D E8 AF FC
|
0030 | 6E 97 07 45 6F 57 D1 A5 BA 11 0E 87 9B 97 A1 46
|
||||||
0040 | AF F8 52 DB 2A B3 F4 3F F3 D2 CC 1B 90 2B 11 26
|
0040 | 95 2B 76 01 95 EE E9 B0 9A 44 16 D1 3A 60 C4 F3
|
||||||
0050 | BD 4F A4 9B 87 DE 3F 92 18 4E EC 68 EB D1 63 45
|
0050 | DC 4F 26 7E FB 3E F6 00 9D 2E 08 B3 1E 80 97 39
|
||||||
0060 | E4 D4 B3 3C 28 16 63 7F A8 BE CA BC 99 C6 02 83
|
0060 | 15 83 C3 D6 3C 99 38 D3 76 D1 0A 19 34 F2 51 4F
|
||||||
0070 | 00 E6 B9 30 4C B0 A1 82 91 6F 6D 9C 86 56 19 D3
|
0070 | 4C 29 38 B7 B7 6E 3F 59 DA 8C 5B 20 FF 08 F1 92
|
||||||
0080 | 99 33 67 E8 FF 6F C4 E7 97 C5 7E 65 4A 67 3C 87
|
0080 | 2A 37 80 81 04 CA E3 DA 3A 39 5A F2 EF 5D 4C 1C
|
||||||
0090 | 12 D4 E0 7A 9E 64 C1 B4 15 7C 2C 96 24 DF 29 5B
|
0090 | 96 90 BC E3 20 66 A1 A0 82 B8 8C FC 50 86 F9 99
|
||||||
00A0 | 28 5B B0 44 A4 5E C4 5C BC 2A 10 64 9E 02 B2 23
|
00A0 | AB 7E 84 7B 45 18 EE FA 8E 6C 2A B4 E5 98 8C 93
|
||||||
00B0 | 90 72 39 3E 6A C7 20 68 13 6B 88 4B BC 41 8E 02
|
00B0 | EC 2E ED 9D 26 4F 3D 29 7E 72 25 92 1F 87 A7 0A
|
||||||
00C0 | 4B F8 A8 DD 12 DB B5 34 EF FF 23 5B 5E 78 AA BB
|
00C0 | 72 92 F5 64 E5 5F 22 C2 11 16 C3 12 0E CA 70 8B
|
||||||
00D0 | 52 4C ED 3E 2C 18 C6 07 F9 83 20 66 AF 94 0B A1
|
00D0 | 81 71 A6 90 CE 5E 85 67 66 95 66 9F 58 1F 70 2B
|
||||||
00E0 | 0E 30 A2 99 B0 AC 55 E1 B4 58 64 FA 54 A5 87 D7
|
00E0 | 8D 99 A4 2B BD 92 76 77 AB 6A EC 82 F7 14 DB 0C
|
||||||
00F0 | AC E1 94 86 80 27 A9 8F 69 59 57 25 E1 AC 03 09
|
00F0 | 80 96 65 41 71 A9 13 D9 16 02 D4 58 F2 E5 3B B2
|
||||||
0100 | 5E 37 C0 48 61 AE 41 BE 64 2B B9 24 46 19 50 9F
|
0100 | 68 9F 1D 75 BA EC FA D5 70 24 47 F6 79 C2 D3 26
|
||||||
0110 | B3 45 3C F8 32 5B DB 00 77 AF 51 AD 27 6D 93 7F
|
0110 | A6 7F D5 A3 56 E2 36 01 8A 4D C1 A8 31 5F 5B D3
|
||||||
0120 | 86 18 EE A6 93 C6 A1 16 BF 05 B0 2A E9 56 AC 65</code></pre>
|
0120 | 5A DD CA 42 1A 0D E3 BD B4 B5 5E 2B 8D A5 78 E4</code></pre>
|
||||||
<p>Payload (de)serialization:</p>
|
<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>
|
<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">
|
<table class="table">
|
||||||
|
@ -658,19 +658,19 @@ answer = BA0D89B5F2FFEBDA55A0626190B657ACCDF39C05C897E4838C1A4733D943AB9893641FB
|
||||||
<tr>
|
<tr>
|
||||||
<td>nonce</td>
|
<td>nonce</td>
|
||||||
<td>4, 16</td>
|
<td>4, 16</td>
|
||||||
<td><code>F2FFEBDA55A0626190B657ACCDF39C05</code></td>
|
<td><code>88A00CB2642E0DCCD6BD553F424330B4</code></td>
|
||||||
<td>Value generated by client in Step 1</td>
|
<td>Value generated by client in Step 1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>server_nonce</td>
|
<td>server_nonce</td>
|
||||||
<td>20, 16</td>
|
<td>20, 16</td>
|
||||||
<td><code>C897E4838C1A4733D943AB9893641FB4</code></td>
|
<td><code>8A33808D1D5BAEE27E2D084DAB67CED0</code></td>
|
||||||
<td>Value received from server in Step 2</td>
|
<td>Value received from server in Step 2</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>g_b</td>
|
<td>g_b</td>
|
||||||
<td>36, 260</td>
|
<td>36, 260</td>
|
||||||
<td><code>FE00010035A300F632B557BCF18A927A</code> <code>4DE8AFFCAFF852DB2AB3F43FF3D2CC1B</code> <code>902B1126BD4FA49B87DE3F92184EEC68</code> <code>EBD16345E4D4B33C2816637FA8BECABC</code> <code>99C6028300E6B9304CB0A182916F6D9C</code> <code>865619D3993367E8FF6FC4E797C57E65</code> <code>4A673C8712D4E07A9E64C1B4157C2C96</code> <code>24DF295B285BB044A45EC45CBC2A1064</code> <code>9E02B2239072393E6AC72068136B884B</code> <code>BC418E024BF8A8DD12DBB534EFFF235B</code> <code>5E78AABB524CED3E2C18C607F9832066</code> <code>AF940BA10E30A299B0AC55E1B45864FA</code> <code>54A587D7ACE194868027A98F69595725</code> <code>E1AC03095E37C04861AE41BE642BB924</code> <code>4619509FB3453CF8325BDB0077AF51AD</code> <code>276D937F8618EEA693C6A116BF05B02A</code><br> <code>E956AC65</code></td>
|
<td><code>FE0001006E9707456F57D1A5BA110E87</code> <code>9B97A146952B760195EEE9B09A4416D1</code> <code>3A60C4F3DC4F267EFB3EF6009D2E08B3</code> <code>1E8097391583C3D63C9938D376D10A19</code> <code>34F2514F4C2938B7B76E3F59DA8C5B20</code> <code>FF08F1922A37808104CAE3DA3A395AF2</code> <code>EF5D4C1C9690BCE32066A1A082B88CFC</code> <code>5086F999AB7E847B4518EEFA8E6C2AB4</code> <code>E5988C93EC2EED9D264F3D297E722592</code> <code>1F87A70A7292F564E55F22C21116C312</code> <code>0ECA708B8171A690CE5E85676695669F</code> <code>581F702B8D99A42BBD927677AB6AEC82</code> <code>F714DB0C8096654171A913D91602D458</code> <code>F2E53BB2689F1D75BAECFAD5702447F6</code> <code>79C2D326A67FD5A356E236018A4DC1A8</code> <code>315F5BD35ADDCA421A0DE3BDB4B55E2B</code><br> <code>8DA578E4</code></td>
|
||||||
<td>Single-byte prefix denoting length, a 256-byte (2048-bit) string, and zero bytes of padding</td>
|
<td>Single-byte prefix denoting length, a 256-byte (2048-bit) string, and zero bytes of padding</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -684,47 +684,47 @@ answer = BA0D89B5F2FFEBDA55A0626190B657ACCDF39C05C897E4838C1A4733D943AB9893641FB
|
||||||
<!-- end client_DH_inner_data -->
|
<!-- 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>
|
<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 -->
|
<!-- start client_DH_inner_data_input -->
|
||||||
<pre><code>data = 54B64366F2FFEBDA55A0626190B657ACCDF39C05C897E4838C1A4733D943AB9893641FB40000000000000000FE00010035A300F632B557BCF18A927A4DE8AFFCAFF852DB2AB3F43FF3D2CC1B902B1126BD4FA49B87DE3F92184EEC68EBD16345E4D4B33C2816637FA8BECABC99C6028300E6B9304CB0A182916F6D9C865619D3993367E8FF6FC4E797C57E654A673C8712D4E07A9E64C1B4157C2C9624DF295B285BB044A45EC45CBC2A10649E02B2239072393E6AC72068136B884BBC418E024BF8A8DD12DBB534EFFF235B5E78AABB524CED3E2C18C607F9832066AF940BA10E30A299B0AC55E1B45864FA54A587D7ACE194868027A98F69595725E1AC03095E37C04861AE41BE642BB9244619509FB3453CF8325BDB0077AF51AD276D937F8618EEA693C6A116BF05B02AE956AC65
|
<pre><code>data = 54B6436688A00CB2642E0DCCD6BD553F424330B48A33808D1D5BAEE27E2D084DAB67CED00000000000000000FE0001006E9707456F57D1A5BA110E879B97A146952B760195EEE9B09A4416D13A60C4F3DC4F267EFB3EF6009D2E08B31E8097391583C3D63C9938D376D10A1934F2514F4C2938B7B76E3F59DA8C5B20FF08F1922A37808104CAE3DA3A395AF2EF5D4C1C9690BCE32066A1A082B88CFC5086F999AB7E847B4518EEFA8E6C2AB4E5988C93EC2EED9D264F3D297E7225921F87A70A7292F564E55F22C21116C3120ECA708B8171A690CE5E85676695669F581F702B8D99A42BBD927677AB6AEC82F714DB0C8096654171A913D91602D458F2E53BB2689F1D75BAECFAD5702447F679C2D326A67FD5A356E236018A4DC1A8315F5BD35ADDCA421A0DE3BDB4B55E2B8DA578E4
|
||||||
padding = BA5BA18ABF32B3EFA400DCBA
|
padding = F06EBED4D1D4AB175BE9CC8E
|
||||||
tmp_aes_key = 594061AE8790464CD895F4EC6E87183395A1D3030D30F301DC4BEA649F715D0E
|
tmp_aes_key = 010C0C9B7A484D3A0D5BE8A9D860F7037247338A949243ABFD2598EA8BAFE4D1
|
||||||
tmp_aes_iv = 4D77BC1E9C065F093B95359EA200FB0DBB6499A2A2356E2764FA3EC11183DF59</code></pre>
|
tmp_aes_iv = E9737E2AA80D0D0FC0161512F6069DF0654F7B84D8A2C4679359DF78C61C4CB1</code></pre>
|
||||||
<!-- end client_DH_inner_data_input -->
|
<!-- end client_DH_inner_data_input -->
|
||||||
<p>Process:</p>
|
<p>Process:</p>
|
||||||
<pre><code>data_with_hash := SHA1(data) + data + padding (0-15 random bytes such that total length is divisible by 16)
|
<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>
|
encrypted_data := AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv);</code></pre>
|
||||||
<p>Output:</p>
|
<p>Output:</p>
|
||||||
<!-- start client_DH_inner_data_output -->
|
<!-- start client_DH_inner_data_output -->
|
||||||
<pre><code>encrypted_data = 8DC5EDF4570B333797D9B0A39B2803B5EFDD4DECE3D7305D1A05348C7EF11BAC05FD42853527D56914DDF9D4AA5C2A42CEF5493B67ED45605BB297DB2B2F0AED96B028BA3029F7A3D39C689B271C6B42A124EA9E82B6B473B844F2DC8B40E1589E88FA1AD7CB598904E540C66B1AE111D26C74C0BA4261FBD313144F5106940A417E042B2553A55AD456154AD9F6C49D26D7CC7A853561539AD08A59B1B39D0D89671EABBE294246F1E2D038679D084DB0DFCFD26C4502B217C6EFCA8C66F8AFDE83A65241892CD2B13B4D81328E1A5182502E9E730C4847FFB797D02799FDD268B3D6226198BF87D9558172D4BCFFB4BC54464369A9309488A0C67BB8E99190C66B8E7848E742C8FD5D3491ABDC4B238BCB512E1D56B52B4EB1A8E74C664ABA560C80DF4152243BCCEFE78E51BCCBE29E7BF9867739B97891318C6CE9BAEC007B5B6708DD0C3DFD911AEA5CA552EB03</code></pre>
|
<pre><code>encrypted_data = 6CA5FA6974FB55D595863B586A284FE5A15AD986F67F1C5A07491EBABBE64A244E45F46CAF47786FCCD17C3AC5CFD571BAF80F5E4986BB7BAF0AD66E82B1E6E9FA03E6D296F5F77BEB8BEB1A979B1517B5AF46E423F39E38628F06208E6CAD6D38B2C0279A84B7182300DBD2F934B243A78BB5508DDAC482868B2F8B06D8F098BA1BB156C5CB8BEE86EBE4403EAB6DDA387A55D101F1B29216C219ADEE29A637F69178C960B74CBC7D779319D0A660FA2C1855F55BD7D03E03C3E591CDD8174E2B147E15592009F1229098C58D639714D8F63A64F8E3CA699118D5C4472523F22ACE75017DC325A01B93BF983D787285AFD56D80D671677F8BAF3B4A62633FEC3EB4AB9FFC6B80358D7DF6420364BF04628C7CC4485D9A472741E6B88CE100C80B5DB173EBA4B44CD4574E7B052083021D64E8F1D142ECB6EB6255CA9739C6D3475550FF6E30A7D1E0B19A23FA2342DB</code></pre>
|
||||||
<!-- end client_DH_inner_data_output -->
|
<!-- end client_DH_inner_data_output -->
|
||||||
<p>The length of the final string is 336 bytes.</p>
|
<p>The length of the final string is 336 bytes.</p>
|
||||||
<h6>7.2) set_client_DH_params query</h6>
|
<h6>7.2) set_client_DH_params query</h6>
|
||||||
<!-- start set_client_DH_params -->
|
<!-- start set_client_DH_params -->
|
||||||
<p>Sent payload (excluding transport headers/trailers):</p>
|
<p>Sent payload (excluding transport headers/trailers):</p>
|
||||||
<pre><code>0000 | 00 00 00 00 00 00 00 00 1C 48 07 00 DE A6 38 67
|
<pre><code>0000 | 00 00 00 00 00 00 00 00 F4 D4 09 00 09 A9 38 67
|
||||||
0010 | 78 01 00 00 1F 5F 04 F5 F2 FF EB DA 55 A0 62 61
|
0010 | 78 01 00 00 1F 5F 04 F5 88 A0 0C B2 64 2E 0D CC
|
||||||
0020 | 90 B6 57 AC CD F3 9C 05 C8 97 E4 83 8C 1A 47 33
|
0020 | D6 BD 55 3F 42 43 30 B4 8A 33 80 8D 1D 5B AE E2
|
||||||
0030 | D9 43 AB 98 93 64 1F B4 FE 50 01 00 8D C5 ED F4
|
0030 | 7E 2D 08 4D AB 67 CE D0 FE 50 01 00 6C A5 FA 69
|
||||||
0040 | 57 0B 33 37 97 D9 B0 A3 9B 28 03 B5 EF DD 4D EC
|
0040 | 74 FB 55 D5 95 86 3B 58 6A 28 4F E5 A1 5A D9 86
|
||||||
0050 | E3 D7 30 5D 1A 05 34 8C 7E F1 1B AC 05 FD 42 85
|
0050 | F6 7F 1C 5A 07 49 1E BA BB E6 4A 24 4E 45 F4 6C
|
||||||
0060 | 35 27 D5 69 14 DD F9 D4 AA 5C 2A 42 CE F5 49 3B
|
0060 | AF 47 78 6F CC D1 7C 3A C5 CF D5 71 BA F8 0F 5E
|
||||||
0070 | 67 ED 45 60 5B B2 97 DB 2B 2F 0A ED 96 B0 28 BA
|
0070 | 49 86 BB 7B AF 0A D6 6E 82 B1 E6 E9 FA 03 E6 D2
|
||||||
0080 | 30 29 F7 A3 D3 9C 68 9B 27 1C 6B 42 A1 24 EA 9E
|
0080 | 96 F5 F7 7B EB 8B EB 1A 97 9B 15 17 B5 AF 46 E4
|
||||||
0090 | 82 B6 B4 73 B8 44 F2 DC 8B 40 E1 58 9E 88 FA 1A
|
0090 | 23 F3 9E 38 62 8F 06 20 8E 6C AD 6D 38 B2 C0 27
|
||||||
00A0 | D7 CB 59 89 04 E5 40 C6 6B 1A E1 11 D2 6C 74 C0
|
00A0 | 9A 84 B7 18 23 00 DB D2 F9 34 B2 43 A7 8B B5 50
|
||||||
00B0 | BA 42 61 FB D3 13 14 4F 51 06 94 0A 41 7E 04 2B
|
00B0 | 8D DA C4 82 86 8B 2F 8B 06 D8 F0 98 BA 1B B1 56
|
||||||
00C0 | 25 53 A5 5A D4 56 15 4A D9 F6 C4 9D 26 D7 CC 7A
|
00C0 | C5 CB 8B EE 86 EB E4 40 3E AB 6D DA 38 7A 55 D1
|
||||||
00D0 | 85 35 61 53 9A D0 8A 59 B1 B3 9D 0D 89 67 1E AB
|
00D0 | 01 F1 B2 92 16 C2 19 AD EE 29 A6 37 F6 91 78 C9
|
||||||
00E0 | BE 29 42 46 F1 E2 D0 38 67 9D 08 4D B0 DF CF D2
|
00E0 | 60 B7 4C BC 7D 77 93 19 D0 A6 60 FA 2C 18 55 F5
|
||||||
00F0 | 6C 45 02 B2 17 C6 EF CA 8C 66 F8 AF DE 83 A6 52
|
00F0 | 5B D7 D0 3E 03 C3 E5 91 CD D8 17 4E 2B 14 7E 15
|
||||||
0100 | 41 89 2C D2 B1 3B 4D 81 32 8E 1A 51 82 50 2E 9E
|
0100 | 59 20 09 F1 22 90 98 C5 8D 63 97 14 D8 F6 3A 64
|
||||||
0110 | 73 0C 48 47 FF B7 97 D0 27 99 FD D2 68 B3 D6 22
|
0110 | F8 E3 CA 69 91 18 D5 C4 47 25 23 F2 2A CE 75 01
|
||||||
0120 | 61 98 BF 87 D9 55 81 72 D4 BC FF B4 BC 54 46 43
|
0120 | 7D C3 25 A0 1B 93 BF 98 3D 78 72 85 AF D5 6D 80
|
||||||
0130 | 69 A9 30 94 88 A0 C6 7B B8 E9 91 90 C6 6B 8E 78
|
0130 | D6 71 67 7F 8B AF 3B 4A 62 63 3F EC 3E B4 AB 9F
|
||||||
0140 | 48 E7 42 C8 FD 5D 34 91 AB DC 4B 23 8B CB 51 2E
|
0140 | FC 6B 80 35 8D 7D F6 42 03 64 BF 04 62 8C 7C C4
|
||||||
0150 | 1D 56 B5 2B 4E B1 A8 E7 4C 66 4A BA 56 0C 80 DF
|
0150 | 48 5D 9A 47 27 41 E6 B8 8C E1 00 C8 0B 5D B1 73
|
||||||
0160 | 41 52 24 3B CC EF E7 8E 51 BC CB E2 9E 7B F9 86
|
0160 | EB A4 B4 4C D4 57 4E 7B 05 20 83 02 1D 64 E8 F1
|
||||||
0170 | 77 39 B9 78 91 31 8C 6C E9 BA EC 00 7B 5B 67 08
|
0170 | D1 42 EC B6 EB 62 55 CA 97 39 C6 D3 47 55 50 FF
|
||||||
0180 | DD 0C 3D FD 91 1A EA 5C A5 52 EB 03</code></pre>
|
0180 | 6E 30 A7 D1 E0 B1 9A 23 FA 23 42 DB</code></pre>
|
||||||
<p>Payload (de)serialization:</p>
|
<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>
|
<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">
|
<table class="table">
|
||||||
|
@ -746,7 +746,7 @@ encrypted_data := AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv);<
|
||||||
<tr>
|
<tr>
|
||||||
<td>message_id</td>
|
<td>message_id</td>
|
||||||
<td>8, 8</td>
|
<td>8, 8</td>
|
||||||
<td><code>1C480700DEA63867</code></td>
|
<td><code>F4D4090009A93867</code></td>
|
||||||
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() << 32) + (N*4)</td>
|
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() << 32) + (N*4)</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -764,19 +764,19 @@ encrypted_data := AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv);<
|
||||||
<tr>
|
<tr>
|
||||||
<td>nonce</td>
|
<td>nonce</td>
|
||||||
<td>24, 16</td>
|
<td>24, 16</td>
|
||||||
<td><code>F2FFEBDA55A0626190B657ACCDF39C05</code></td>
|
<td><code>88A00CB2642E0DCCD6BD553F424330B4</code></td>
|
||||||
<td>Value generated by client in Step 1</td>
|
<td>Value generated by client in Step 1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>server_nonce</td>
|
<td>server_nonce</td>
|
||||||
<td>40, 16</td>
|
<td>40, 16</td>
|
||||||
<td><code>C897E4838C1A4733D943AB9893641FB4</code></td>
|
<td><code>8A33808D1D5BAEE27E2D084DAB67CED0</code></td>
|
||||||
<td>Value received from server in Step 2</td>
|
<td>Value received from server in Step 2</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>encrypted_data</td>
|
<td>encrypted_data</td>
|
||||||
<td>56, 340</td>
|
<td>56, 340</td>
|
||||||
<td><code>FE5001008DC5EDF4570B333797D9B0A3</code> <code>9B2803B5EFDD4DECE3D7305D1A05348C</code> <code>7EF11BAC05FD42853527D56914DDF9D4</code> <code>AA5C2A42CEF5493B67ED45605BB297DB</code> <code>2B2F0AED96B028BA3029F7A3D39C689B</code> <code>271C6B42A124EA9E82B6B473B844F2DC</code> <code>8B40E1589E88FA1AD7CB598904E540C6</code> <code>6B1AE111D26C74C0BA4261FBD313144F</code> <code>5106940A417E042B2553A55AD456154A</code> <code>D9F6C49D26D7CC7A853561539AD08A59</code> <code>B1B39D0D89671EABBE294246F1E2D038</code> <code>679D084DB0DFCFD26C4502B217C6EFCA</code> <code>8C66F8AFDE83A65241892CD2B13B4D81</code> <code>328E1A5182502E9E730C4847FFB797D0</code> <code>2799FDD268B3D6226198BF87D9558172</code> <code>D4BCFFB4BC54464369A9309488A0C67B</code> <code>B8E99190C66B8E7848E742C8FD5D3491</code> <code>ABDC4B238BCB512E1D56B52B4EB1A8E7</code> <code>4C664ABA560C80DF4152243BCCEFE78E</code> <code>51BCCBE29E7BF9867739B97891318C6C</code> <code>E9BAEC007B5B6708DD0C3DFD911AEA5C</code><br> <code>A552EB03</code></td>
|
<td><code>FE5001006CA5FA6974FB55D595863B58</code> <code>6A284FE5A15AD986F67F1C5A07491EBA</code> <code>BBE64A244E45F46CAF47786FCCD17C3A</code> <code>C5CFD571BAF80F5E4986BB7BAF0AD66E</code> <code>82B1E6E9FA03E6D296F5F77BEB8BEB1A</code> <code>979B1517B5AF46E423F39E38628F0620</code> <code>8E6CAD6D38B2C0279A84B7182300DBD2</code> <code>F934B243A78BB5508DDAC482868B2F8B</code> <code>06D8F098BA1BB156C5CB8BEE86EBE440</code> <code>3EAB6DDA387A55D101F1B29216C219AD</code> <code>EE29A637F69178C960B74CBC7D779319</code> <code>D0A660FA2C1855F55BD7D03E03C3E591</code> <code>CDD8174E2B147E15592009F1229098C5</code> <code>8D639714D8F63A64F8E3CA699118D5C4</code> <code>472523F22ACE75017DC325A01B93BF98</code> <code>3D787285AFD56D80D671677F8BAF3B4A</code> <code>62633FEC3EB4AB9FFC6B80358D7DF642</code> <code>0364BF04628C7CC4485D9A472741E6B8</code> <code>8CE100C80B5DB173EBA4B44CD4574E7B</code> <code>052083021D64E8F1D142ECB6EB6255CA</code> <code>9739C6D3475550FF6E30A7D1E0B19A23</code><br> <code>FA2342DB</code></td>
|
||||||
<td>Encrypted client_DH_inner_data generated previously, serialized as a TL byte string</td>
|
<td>Encrypted client_DH_inner_data generated previously, serialized as a TL byte string</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</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>
|
<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>
|
<p>The client computes the auth_key using formula <code>g_a^b mod dh_prime</code>:</p>
|
||||||
<!-- start auth_key -->
|
<!-- start auth_key -->
|
||||||
<pre><code>auth_key = 86E1807DB45ED838284D01E5DF7DE333F35B5B65F70D86204C06FC16442F50CBCFB749AFD9FED3234BBA4C997BEC0AA5761F08125569623021B67DE2811E9892A7D928C517BC678A3169CF3FBCD082A2AD5BA0B3AD667C7290F9361FF85D8C3EB1F404E54540154A56CCBAFBFFDDAD2E700C0B5E92A5274EFA27B825882EB21CEE9CF380CFD7BFD881EC7F20BD65F5022F77A84F0604A70FC3518A4A61E1EE9FFDE9677685C903428128251FAA7A99ADDC490ECE12B4C03055B8DE35B9F5E62F0A64923E3AD8CC7FC5F9B79098D35C5DE38A13C4D69A2BD8DE2EBB0854F533B7164C876DA5C4E804D9F8DCDD9CCC678E7C0F20B9DE86C012CA55A84A3955AFB6</code></pre>
|
<pre><code>auth_key = BCEC8676D1BF9942E58451FB59B077B4E1CED8BEA189910E9C4759551612EE1EF1C33ED8DC685B5D2ADD46F4C04DD62A8884F0DA77FE8FA1FD973063F7535AA22D5BF85FAD0D6B856911272DAAE6E8ADA29E2679D2879696AA711F95A225C896DE07F72BF1342ED04F528943537F68C4E12AAEFC79A05BC1ACFB7DE4CCC9B694977D98ED4BDD7971B2CCED07B4F760366A5FAE69121DEB9A79A127B30A965E438831F731EEB0616EC5EB40158F669878E28F54482D859E458B8A3C0DEEA3B817A4236AE729A6A147379F7E98737D00E17BEC1DFF0896F9C11D18394F64F2548E877F7623D7845587FEA12F02FFE2479DBCCB688C2248E036CD0D74C82B956A25</code></pre>
|
||||||
<!-- end auth_key -->
|
<!-- 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>
|
<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>
|
<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 -->
|
<!-- start dh_gen_ok -->
|
||||||
<p>Received payload (excluding transport headers/trailers):</p>
|
<p>Received payload (excluding transport headers/trailers):</p>
|
||||||
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 E0 1A CE DE A6 38 67
|
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 6C 44 58 0B A9 38 67
|
||||||
0010 | 34 00 00 00 34 F7 CB 3B F2 FF EB DA 55 A0 62 61
|
0010 | 34 00 00 00 34 F7 CB 3B 88 A0 0C B2 64 2E 0D CC
|
||||||
0020 | 90 B6 57 AC CD F3 9C 05 C8 97 E4 83 8C 1A 47 33
|
0020 | D6 BD 55 3F 42 43 30 B4 8A 33 80 8D 1D 5B AE E2
|
||||||
0030 | D9 43 AB 98 93 64 1F B4 14 D2 0C 61 FB F8 BC D0
|
0030 | 7E 2D 08 4D AB 67 CE D0 EC 44 2B 71 0B 93 7F 95
|
||||||
0040 | DF E5 90 21 13 41 D6 1D</code></pre>
|
0040 | 1F 3F 2D 57 D0 B3 38 2E</code></pre>
|
||||||
<p>Payload (de)serialization:</p>
|
<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>
|
<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">
|
<table class="table">
|
||||||
|
@ -817,7 +817,7 @@ encrypted_data := AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv);<
|
||||||
<tr>
|
<tr>
|
||||||
<td>message_id</td>
|
<td>message_id</td>
|
||||||
<td>8, 8</td>
|
<td>8, 8</td>
|
||||||
<td><code>01E01ACEDEA63867</code></td>
|
<td><code>016C44580BA93867</code></td>
|
||||||
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() << 32) + (N*4)</td>
|
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() << 32) + (N*4)</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -835,19 +835,19 @@ encrypted_data := AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv);<
|
||||||
<tr>
|
<tr>
|
||||||
<td>nonce</td>
|
<td>nonce</td>
|
||||||
<td>24, 16</td>
|
<td>24, 16</td>
|
||||||
<td><code>F2FFEBDA55A0626190B657ACCDF39C05</code></td>
|
<td><code>88A00CB2642E0DCCD6BD553F424330B4</code></td>
|
||||||
<td>Value generated by client in Step 1</td>
|
<td>Value generated by client in Step 1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>server_nonce</td>
|
<td>server_nonce</td>
|
||||||
<td>40, 16</td>
|
<td>40, 16</td>
|
||||||
<td><code>C897E4838C1A4733D943AB9893641FB4</code></td>
|
<td><code>8A33808D1D5BAEE27E2D084DAB67CED0</code></td>
|
||||||
<td>Value received from server in Step 2</td>
|
<td>Value received from server in Step 2</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>new_nonce_hash1</td>
|
<td>new_nonce_hash1</td>
|
||||||
<td>56, 16</td>
|
<td>56, 16</td>
|
||||||
<td><code>14D20C61FBF8BCD0DFE590211341D61D</code></td>
|
<td><code>EC442B710B937F951F3F2D57D0B3382E</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>
|
<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>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
Loading…
Reference in a new issue