Update content of files

This commit is contained in:
GitHub Action 2024-11-16 16:54:04 +00:00
parent 4c7165a461
commit b7d2b20971
8 changed files with 248 additions and 247 deletions

View file

@ -189,7 +189,7 @@
<h5><a class="anchor" href="#new-methods" id="new-methods" name="new-methods"><i class="anchor-icon"></i></a>New Methods</h5>
<ul>
<li>Added <a href="/method/payments.getStarsGiveawayOptions">payments.getStarsGiveawayOptions</a> - </li>
<li>Added <a href="/method/messages.getPaidReactionPrivacy">messages.getPaidReactionPrivacy</a> - </li>
<li>Added <a href="/method/messages.getPaidReactionPrivacy">messages.getPaidReactionPrivacy</a> - Fetches an <a href="/constructor/updatePaidReactionPrivacy">updatePaidReactionPrivacy</a> update with the current <a href="/api/reactions#paid-reactions">default paid reaction privacy, see here &amp;raquo:</a> for more info.</li>
</ul>
<h5><a class="anchor" href="#changed-methods" id="changed-methods" name="changed-methods"><i class="anchor-icon"></i></a>Changed Methods</h5>
<ul>
@ -201,7 +201,7 @@
<li>Added <a href="/constructor/channelAdminLogEventActionParticipantSubExtend">channelAdminLogEventActionParticipantSubExtend</a> - A paid subscriber has extended their <a href="/api/stars#star-subscriptions">Telegram Star subscription »</a>.</li>
<li>Added <a href="/constructor/inputStorePaymentStarsGiveaway">inputStorePaymentStarsGiveaway</a> - </li>
<li>Added <a href="/constructor/messageActionPrizeStars">messageActionPrizeStars</a> - </li>
<li>Added <a href="/constructor/updatePaidReactionPrivacy">updatePaidReactionPrivacy</a> - </li>
<li>Added <a href="/constructor/updatePaidReactionPrivacy">updatePaidReactionPrivacy</a> - Contains the current <a href="/api/reactions#paid-reactions">default paid reaction privacy, see here &amp;raquo:</a> for more info.</li>
<li>Added <a href="/constructor/starsGiveawayOption">starsGiveawayOption</a> - </li>
<li>Added <a href="/constructor/starsGiveawayWinnersOption">starsGiveawayWinnersOption</a> - </li>
<li>Added <a href="/constructor/prepaidStarsGiveaway">prepaidStarsGiveaway</a> - </li>

View file

@ -87,9 +87,20 @@ In groups, <a href="/method/messages.reportReaction">messages.reportReaction</a>
<p><a href="/method/messages.getUnreadReactions">messages.getUnreadReactions</a> is used to fetch messages with unread reactions.<br>
Use <a href="/method/messages.readReactions">messages.readReactions</a> to mark all reactions as read in a certain chat.</p>
<p>For <a href="/api/saved-messages">saved messages</a>, if the <code>reactions_as_tags</code> flag of <a href="/constructor/messageReactions">messageReactions</a> is set, or if there are no reactions, all present and future reactions should be treated as <a href="/api/saved-messages#tags">message tags, see here » for more info</a>.</p>
<h4><a class="anchor" href="#paid-reactions" id="paid-reactions" name="paid-reactions"><i class="anchor-icon"></i></a>Paid reactions</h4>
<h3><a class="anchor" href="#paid-reactions" id="paid-reactions" name="paid-reactions"><i class="anchor-icon"></i></a>Paid reactions</h3>
<pre><code><a href='/constructor/reactionPaid'>reactionPaid</a>#523da4eb = <a href='/type/Reaction'>Reaction</a>;
---functions---
<a href='/method/messages.setChatAvailableReactions'>messages.setChatAvailableReactions</a>#864b2581 flags:<a href='/type/%23'>#</a> peer:<a href='/type/InputPeer'>InputPeer</a> available_reactions:<a href='/type/ChatReactions'>ChatReactions</a> reactions_limit:flags.0?<a href='/type/int'>int</a> paid_enabled:flags.1?<a href='/type/Bool'>Bool</a> = <a href='/type/Updates'>Updates</a>;
<a href='/method/messages.sendPaidReaction'>messages.sendPaidReaction</a>#9dd6a67b flags:<a href='/type/%23'>#</a> peer:<a href='/type/InputPeer'>InputPeer</a> msg_id:<a href='/type/int'>int</a> count:<a href='/type/int'>int</a> random_id:<a href='/type/long'>long</a> private:flags.0?<a href='/type/Bool'>Bool</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>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>
<h4><a class="anchor" href="#paid-reaction-privacy" id="paid-reaction-privacy" name="paid-reaction-privacy"><i class="anchor-icon"></i></a>Paid reaction privacy</h4>
<pre><code><a href='/constructor/updatePaidReactionPrivacy'>updatePaidReactionPrivacy</a>#51ca7aec private:<a href='/type/Bool'>Bool</a> = <a href='/type/Update'>Update</a>;
<a href='/constructor/updateMessageReactions'>updateMessageReactions</a>#5e1b3cb8 flags:<a href='/type/%23'>#</a> peer:<a href='/type/Peer'>Peer</a> msg_id:<a href='/type/int'>int</a> top_msg_id:flags.0?<a href='/type/int'>int</a> reactions:<a href='/type/MessageReactions'>MessageReactions</a> = <a href='/type/Update'>Update</a>;
<a href='/constructor/messageReactions'>messageReactions</a>#a339f0b 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>&lt;<a href='/type/ReactionCount'>ReactionCount</a>&gt; recent_reactions:flags.1?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/MessagePeerReaction'>MessagePeerReaction</a>&gt; top_reactors:flags.4?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/MessageReactor'>MessageReactor</a>&gt; = <a href='/type/MessageReactions'>MessageReactions</a>;
@ -98,20 +109,20 @@ Use <a href="/method/messages.readReactions">messages.readReactions</a> to mark
---functions---
<a href='/method/messages.setChatAvailableReactions'>messages.setChatAvailableReactions</a>#864b2581 flags:<a href='/type/%23'>#</a> peer:<a href='/type/InputPeer'>InputPeer</a> available_reactions:<a href='/type/ChatReactions'>ChatReactions</a> reactions_limit:flags.0?<a href='/type/int'>int</a> paid_enabled:flags.1?<a href='/type/Bool'>Bool</a> = <a href='/type/Updates'>Updates</a>;
<a href='/method/messages.getPaidReactionPrivacy'>messages.getPaidReactionPrivacy</a>#472455aa = <a href='/type/Updates'>Updates</a>;
<a href='/method/messages.sendPaidReaction'>messages.sendPaidReaction</a>#9dd6a67b flags:<a href='/type/%23'>#</a> peer:<a href='/type/InputPeer'>InputPeer</a> msg_id:<a href='/type/int'>int</a> count:<a href='/type/int'>int</a> random_id:<a href='/type/long'>long</a> private:flags.0?<a href='/type/Bool'>Bool</a> = <a href='/type/Updates'>Updates</a>;
<a href='/method/messages.togglePaidReactionPrivacy'>messages.togglePaidReactionPrivacy</a>#849ad397 peer:<a href='/type/InputPeer'>InputPeer</a> msg_id:<a href='/type/int'>int</a> private:<a href='/type/Bool'>Bool</a> = <a href='/type/Bool'>Bool</a>;
<a href='/method/messages.getMessagesReactions'>messages.getMessagesReactions</a>#8bba90e6 peer:<a href='/type/InputPeer'>InputPeer</a> id:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/int'>int</a>&gt; = <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>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>
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 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: this will use the default reaction privacy, stored on the server and synced to clients using <a href="/constructor/updatePaidReactionPrivacy">updatePaidReactionPrivacy</a> (see below for more info). </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>Explicitly specifying a custom reaction privacy, or changing the reaction privacy of already sent reactions will update the default reaction privacy stored on the server: if the new value is different from the old one, an <a href="/constructor/updatePaidReactionPrivacy">updatePaidReactionPrivacy</a> update will be emitted.<br>
Clients should invoke <a href="/method/messages.getPaidReactionPrivacy">messages.getPaidReactionPrivacy</a> on startup to fetch the current default reaction privacy (because the <a href="/constructor/updatePaidReactionPrivacy">updatePaidReactionPrivacy</a> update is only sent to currently online sessions and cannot be fetched using getDifference on client startup). </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>
<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>

View file

@ -4,26 +4,10 @@
<meta charset="utf-8">
<title>updatePaidReactionPrivacy</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="description" content="Parameters
Name
Type
Description
private
Bool
 
Type
Update">
<meta property="description" content="Contains the current default paid reaction privacy, see here &amp;amp;raquo: for more info. Clients should invoke messages.getPaidReactionPrivacy on startup to fetch the current default reaction privacy because this update is only sent to currently online sessions and cannot be fetched using getDifference on client startup.">
<meta property="og:title" content="updatePaidReactionPrivacy">
<meta property="og:image" content="">
<meta property="og:description" content="Parameters
Name
Type
Description
private
Bool
 
Type
Update">
<meta property="og:description" content="Contains the current default paid reaction privacy, see here &amp;amp;raquo: for more info. Clients should invoke messages.getPaidReactionPrivacy on startup to fetch the current default reaction privacy because this update is only sent to currently online sessions and cannot be fetched using getDifference on client startup.">
<link rel="icon" type="image/svg+xml" href="/img/website_icon.svg?4">
<link rel="apple-touch-icon" sizes="180x180" href="/img/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/img/favicon-32x32.png">
@ -58,7 +42,9 @@ Update">
<div class="dev_page_bread_crumbs"><ul class="breadcrumb clearfix"><li><a href="/api" >API</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/schema" >TL-schema</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/constructor/updatePaidReactionPrivacy" >updatePaidReactionPrivacy</a></li></ul></div>
<h1 id="dev_page_title">updatePaidReactionPrivacy</h1>
<div id="dev_page_content"><p><div class="clearfix">
<div id="dev_page_content"><p>Contains the current <a href="/api/reactions#paid-reactions">default paid reaction privacy, see here &amp;raquo:</a> for more info.</p>
<p>Clients should invoke <a href="/method/messages.getPaidReactionPrivacy">messages.getPaidReactionPrivacy</a> on startup to fetch the current default reaction privacy because this update is only sent to currently online sessions and cannot be fetched using getDifference on client startup.</p>
<p><div class="clearfix">
<ul class="dev_layer_select slightly-pull-right nav nav-pills">
<li class="dropdown">
<a class="dropdown-toggle" onclick="return dropdownClick(this, event)" href="#">Layer 192 <b class="caret"></b></a>
@ -84,12 +70,17 @@ Update">
<tr>
<td><strong>private</strong></td>
<td style="text-align: center;"><a href="/type/Bool">Bool</a></td>
<td> </td>
<td>Whether paid reaction privacy is enabled or disabled.</td>
</tr>
</tbody>
</table>
<h3><a class="anchor" href="#type" id="type" name="type"><i class="anchor-icon"></i></a>Type</h3>
<p><a href="/type/Update">Update</a></p></div>
<p><a href="/type/Update">Update</a></p>
<h3><a class="anchor" href="#related-pages" id="related-pages" name="related-pages"><i class="anchor-icon"></i></a>Related pages</h3>
<h4><a class="anchor" href="#message-reactions" id="message-reactions" name="message-reactions"><i class="anchor-icon"></i></a><a href="/api/reactions">Message reactions</a></h4>
<p>Telegram allows users to react on any message using specific emojis, triggering cute lottie animations.</p>
<h4><a class="anchor" href="#messagesgetpaidreactionprivacy" id="messagesgetpaidreactionprivacy" name="messagesgetpaidreactionprivacy"><i class="anchor-icon"></i></a><a href="/method/messages.getPaidReactionPrivacy">messages.getPaidReactionPrivacy</a></h4>
<p>Fetches an <a href="/constructor/updatePaidReactionPrivacy">updatePaidReactionPrivacy</a> update with the current <a href="/api/reactions#paid-reactions">default paid reaction privacy, see here &amp;raquo:</a> for more info.</p></div>
</div>

View file

@ -4,18 +4,10 @@
<meta charset="utf-8">
<title>messages.getPaidReactionPrivacy</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="description" content="Parameters
This constructor does not require any parameters.
Result
Updates
Bots can use this method">
<meta property="description" content="Fetches an updatePaidReactionPrivacy update with the current default paid reaction privacy, see here &amp;amp;raquo: for more info.">
<meta property="og:title" content="messages.getPaidReactionPrivacy">
<meta property="og:image" content="">
<meta property="og:description" content="Parameters
This constructor does not require any parameters.
Result
Updates
Bots can use this method">
<meta property="og:description" content="Fetches an updatePaidReactionPrivacy update with the current default paid reaction privacy, see here &amp;amp;raquo: for more info.">
<link rel="icon" type="image/svg+xml" href="/img/website_icon.svg?4">
<link rel="apple-touch-icon" sizes="180x180" href="/img/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/img/favicon-32x32.png">
@ -50,7 +42,8 @@ Bots can use this method">
<div class="dev_page_bread_crumbs"><ul class="breadcrumb clearfix"><li><a href="/api" >API</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/methods" >All Methods</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/method/messages.getPaidReactionPrivacy" >messages.getPaidReactionPrivacy</a></li></ul></div>
<h1 id="dev_page_title">messages.getPaidReactionPrivacy</h1>
<div id="dev_page_content"><p><div class="clearfix">
<div id="dev_page_content"><p>Fetches an <a href="/constructor/updatePaidReactionPrivacy">updatePaidReactionPrivacy</a> update with the current <a href="/api/reactions#paid-reactions">default paid reaction privacy, see here &amp;raquo:</a> for more info.</p>
<p><div class="clearfix">
<ul class="dev_layer_select slightly-pull-right nav nav-pills">
<li class="dropdown">
<a class="dropdown-toggle" onclick="return dropdownClick(this, event)" href="#">Layer 192 <b class="caret"></b></a>
@ -75,7 +68,13 @@ Bots can use this method">
<p>This constructor does not require any parameters.</p>
<h3><a class="anchor" href="#result" id="result" name="result"><i class="anchor-icon"></i></a>Result</h3>
<p><a href="/type/Updates">Updates</a></p>
<h3><a class="anchor" href="#bots-can-use-this-method" id="bots-can-use-this-method" name="bots-can-use-this-method"><i class="anchor-icon"></i></a>Bots can use this method</h3></div>
<h3><a class="anchor" href="#bots-can-use-this-method" id="bots-can-use-this-method" name="bots-can-use-this-method"><i class="anchor-icon"></i></a>Bots can use this method</h3>
<h3><a class="anchor" href="#related-pages" id="related-pages" name="related-pages"><i class="anchor-icon"></i></a>Related pages</h3>
<h4><a class="anchor" href="#updatepaidreactionprivacy" id="updatepaidreactionprivacy" name="updatepaidreactionprivacy"><i class="anchor-icon"></i></a><a href="/constructor/updatePaidReactionPrivacy">updatePaidReactionPrivacy</a></h4>
<p>Contains the current <a href="/api/reactions#paid-reactions">default paid reaction privacy, see here &amp;raquo:</a> for more info.</p>
<p>Clients should invoke <a href="/method/messages.getPaidReactionPrivacy">messages.getPaidReactionPrivacy</a> on startup to fetch the current default reaction privacy because this update is only sent to currently online sessions and cannot be fetched using getDifference on client startup.</p>
<h4><a class="anchor" href="#message-reactions" id="message-reactions" name="message-reactions"><i class="anchor-icon"></i></a><a href="/api/reactions">Message reactions</a></h4>
<p>Telegram allows users to react on any message using specific emojis, triggering cute lottie animations.</p></div>
</div>

View file

@ -3722,7 +3722,7 @@ Look for updates of telegram&#39;s terms of service…">
</tr>
<tr>
<td><a href="/method/messages.getPaidReactionPrivacy">messages.getPaidReactionPrivacy</a></td>
<td> </td>
<td>Fetches an <a href="/constructor/updatePaidReactionPrivacy">updatePaidReactionPrivacy</a> update with the current <a href="/api/reactions#paid-reactions">default paid reaction privacy, see here &amp;raquo:</a> for more info.</td>
</tr>
<tr>
<td><a href="/method/payments.getStarGifts">payments.getStarGifts</a></td>

View file

@ -53,9 +53,9 @@
<h5><a class="anchor" href="#1-client-sends-query-to-server" id="1-client-sends-query-to-server" name="1-client-sends-query-to-server"><i class="anchor-icon"></i></a>1) Client sends query to server</h5>
<!-- start req_pq_multi -->
<p>Sent payload (excluding transport headers/trailers):</p>
<pre><code>0000 | 00 00 00 00 00 00 00 00 E8 C8 09 00 54 C6 38 67
0010 | 14 00 00 00 F1 8E 7E BE D0 EA B0 A3 DD 8B 65 05
0020 | 20 F1 6A 47 11 72 C2 18</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 74 24 08 00 92 CB 38 67
0010 | 14 00 00 00 F1 8E 7E BE 1B BA D0 0E 11 31 66 36
0020 | C1 B9 C0 4B 10 94 49 91</code></pre>
<p>Payload (de)serialization:</p>
<pre><code>req_pq_multi#be7e8ef1 nonce:int128 = ResPQ;</code></pre>
<table class="table">
@ -77,7 +77,7 @@
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>E8C8090054C63867</code></td>
<td><code>7424080092CB3867</code></td>
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() &lt;&lt; 32) + (N*4)</td>
</tr>
<tr>
@ -95,7 +95,7 @@
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>D0EAB0A3DD8B650520F16A471172C218</code></td>
<td><code>1BBAD00E11316636C1B9C04B10944991</code></td>
<td>Random number</td>
</tr>
</tbody>
@ -104,11 +104,11 @@
<h5><a class="anchor" href="#2-server-sends-response-of-the-form" id="2-server-sends-response-of-the-form" name="2-server-sends-response-of-the-form"><i class="anchor-icon"></i></a>2) Server sends response of the form</h5>
<!-- start resPQ -->
<p>Received payload (excluding transport headers/trailers):</p>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 94 00 BF 54 C6 38 67
0010 | 50 00 00 00 63 24 16 05 D0 EA B0 A3 DD 8B 65 05
0020 | 20 F1 6A 47 11 72 C2 18 C0 92 69 C7 22 14 AE DD
0030 | E8 96 CA 82 5F 21 C7 3B 08 20 1D 4F 3A FE F4 5B
0040 | E7 00 00 00 15 C4 B5 1C 03 00 00 00 85 FD 64 DE
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 14 B2 D4 92 CB 38 67
0010 | 50 00 00 00 63 24 16 05 1B BA D0 0E 11 31 66 36
0020 | C1 B9 C0 4B 10 94 49 91 16 A1 6B FD 31 17 CE 50
0030 | 63 59 3B 17 F8 B8 92 01 08 2E 40 64 21 C9 1C 65
0040 | 29 00 00 00 15 C4 B5 1C 03 00 00 00 85 FD 64 DE
0050 | 85 1D 9D D0 A5 B7 F7 09 35 5F C3 0B 21 6B E8 6C
0060 | 02 2B B4 C3</code></pre>
<p>Payload (de)serialization:</p>
@ -132,7 +132,7 @@
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>019400BF54C63867</code></td>
<td><code>0114B2D492CB3867</code></td>
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() &lt;&lt; 32) + (N*4)</td>
</tr>
<tr>
@ -150,19 +150,19 @@
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>D0EAB0A3DD8B650520F16A471172C218</code></td>
<td><code>1BBAD00E11316636C1B9C04B10944991</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>C09269C72214AEDDE896CA825F21C73B</code></td>
<td><code>16A16BFD3117CE5063593B17F8B89201</code></td>
<td>Server-generated random number</td>
</tr>
<tr>
<td>pq</td>
<td>56, 12</td>
<td><code>08201D4F3AFEF45BE7000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2314092898342427623</td>
<td><code>082E406421C91C6529000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 3332773820524946729</td>
<td>Single-byte prefix denoting length, an 8-byte string, and three bytes of padding</td>
</tr>
<tr>
@ -208,22 +208,22 @@
<h4><a class="anchor" href="#proof-of-work" id="proof-of-work" name="proof-of-work"><i class="anchor-icon"></i></a>Proof of work</h4>
<h5><a class="anchor" href="#3-client-decomposes-pq-into-prime-factors-such-that-p-lt-q" id="3-client-decomposes-pq-into-prime-factors-such-that-p-lt-q" name="3-client-decomposes-pq-into-prime-factors-such-that-p-lt-q"><i class="anchor-icon"></i></a>3) Client decomposes pq into prime factors such that p &lt; q.</h5>
<!-- start pq -->
<pre><code>pq = 2314092898342427623</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>2314092898342427623 = 1188071597 * 1947772259</code></p>
<pre><code>p = 1188071597
q = 1947772259</code></pre>
<pre><code>pq = 3332773820524946729</code></pre>
<p>Decompose into 2 prime cofactors <code>p &lt; q</code>: <code>3332773820524946729 = 1770870041 * 1881997969</code></p>
<pre><code>p = 1770870041
q = 1881997969</code></pre>
<!-- end pq -->
<h4><a class="anchor" href="#presenting-proof-of-work-server-authentication" id="presenting-proof-of-work-server-authentication" name="presenting-proof-of-work-server-authentication"><i class="anchor-icon"></i></a>Presenting proof of work; Server authentication</h4>
<h5><a class="anchor" href="#4-encrypted-data-payload-generation" id="4-encrypted-data-payload-generation" name="4-encrypted-data-payload-generation"><i class="anchor-icon"></i></a>4) <code>encrypted_data</code> payload generation</h5>
<p>First of all, generate an <code>encrypted_data</code> payload as follows:</p>
<!-- start p_q_inner_data_dc -->
<p>Generated payload (excluding transport headers/trailers):</p>
<pre><code>0000 | 95 5F F5 A9 08 20 1D 4F 3A FE F4 5B E7 00 00 00
0010 | 04 46 D0 88 AD 00 00 00 04 74 18 A5 63 00 00 00
0020 | D0 EA B0 A3 DD 8B 65 05 20 F1 6A 47 11 72 C2 18
0030 | C0 92 69 C7 22 14 AE DD E8 96 CA 82 5F 21 C7 3B
0040 | B2 CA 4D 77 45 C4 A3 34 E3 D5 D1 9A FA 62 30 B6
0050 | F7 87 FE 4B C0 FD 61 34 9D 1C A3 0B 30 28 26 61
<pre><code>0000 | 95 5F F5 A9 08 2E 40 64 21 C9 1C 65 29 00 00 00
0010 | 04 69 8D 55 19 00 00 00 04 70 2D 02 91 00 00 00
0020 | 1B BA D0 0E 11 31 66 36 C1 B9 C0 4B 10 94 49 91
0030 | 16 A1 6B FD 31 17 CE 50 63 59 3B 17 F8 B8 92 01
0040 | 86 F3 5B 10 97 21 C8 55 E2 E8 81 55 3C EF 92 95
0050 | 0C 31 AE 54 A3 AE BB 4D 48 DC E8 4B 74 D5 DD 63
0060 | 02 00 00 00</code></pre>
<p>Payload (de)serialization:</p>
<pre><code>p_q_inner_data_dc#a9f55f95 pq:string p:string q:string nonce:int128 server_nonce:int128 new_nonce:int256 dc:int = P_Q_inner_data;</code></pre>
@ -246,37 +246,37 @@ q = 1947772259</code></pre>
<tr>
<td>pq</td>
<td>4, 12</td>
<td><code>08201D4F3AFEF45BE7000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 2314092898342427623</td>
<td><code>082E406421C91C6529000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 3332773820524946729</td>
<td>Single-byte prefix denoting length, 8-byte string, and three bytes of padding</td>
</tr>
<tr>
<td>p</td>
<td>16, 8</td>
<td><code>0446D088AD000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1188071597</td>
<td><code>04698D5519000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1770870041</td>
<td>First prime cofactor: single-byte prefix denoting length, 4-byte string, and three bytes of padding</td>
</tr>
<tr>
<td>q</td>
<td>24, 8</td>
<td><code>047418A563000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1947772259</td>
<td><code>04702D0291000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1881997969</td>
<td>Second prime cofactor: single-byte prefix denoting length, 4-byte string, and three bytes of padding</td>
</tr>
<tr>
<td>nonce</td>
<td>32, 16</td>
<td><code>D0EAB0A3DD8B650520F16A471172C218</code></td>
<td><code>1BBAD00E11316636C1B9C04B10944991</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>48, 16</td>
<td><code>C09269C72214AEDDE896CA825F21C73B</code></td>
<td><code>16A16BFD3117CE5063593B17F8B89201</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce</td>
<td>64, 32</td>
<td><code>B2CA4D7745C4A334E3D5D19AFA6230B6</code> <code>F787FE4BC0FD61349D1CA30B30282661</code></td>
<td><code>86F35B109721C855E2E881553CEF9295</code> <code>0C31AE54A3AEBB4D48DCE84B74D5DD63</code></td>
<td>Client-generated random number</td>
</tr>
<tr>
@ -291,39 +291,39 @@ q = 1947772259</code></pre>
<p>The serialization of <em>P_Q_inner_data</em> produces <strong>data</strong>, which is used to generate <strong>encrypted_data</strong> as specified in <a href="/mtproto/auth_key">step 4.1</a>.<br>
These are the inputs to the algorithm specified in <a href="/mtproto/auth_key">step 4.1</a>:</p>
<!-- start p_q_inner_data_input -->
<pre><code>data = 955FF5A908201D4F3AFEF45BE70000000446D088AD000000047418A563000000D0EAB0A3DD8B650520F16A471172C218C09269C72214AEDDE896CA825F21C73BB2CA4D7745C4A334E3D5D19AFA6230B6F787FE4BC0FD61349D1CA30B3028266102000000
random_padding_bytes = C5E87EBF5506A6686F2E82264FA171E50FE4FB4E2D02950EE5AF742425812DBF348FA2F4E069B4AF859B232D3791547FAE228003EC51FECAEF67C81C662181BE00D05A33056E7D65004C201557C9B53F33412E384EDA3A52D7F7FD60</code></pre>
<pre><code>data = 955FF5A9082E406421C91C652900000004698D551900000004702D02910000001BBAD00E11316636C1B9C04B1094499116A16BFD3117CE5063593B17F8B8920186F35B109721C855E2E881553CEF92950C31AE54A3AEBB4D48DCE84B74D5DD6302000000
random_padding_bytes = 3D3C5A73F7500704DB7F36ABDA9B28ADB869391B6740501DA761926239FCDE780F982B1452FC63A0FB9789FBCF33AD5762E41744BB3ACCD703640C180B9E78C55408C619A4381419CD4331D0DBE639D778183DC2924E54E004FB89B6</code></pre>
<!-- end p_q_inner_data_input -->
<p>And this is the output:</p>
<!-- start p_q_inner_data_output -->
<pre><code>encrypted_data = AE78994C63A6468CCB77EF2AA90C3737395D6889544148F030B59841832FFDBCFA88B64408169C67FEE880042CAF2A1A6055756451472982A467D87F462F179C68760A3D746574881838ABFC14D20A9DE5DB97AA78629F13646B86D5AEDC344187858C0BD610218181007E75645CD2EC5F0EA93F1CA377CA0E0D23AC484E158C5BD779946A9A81ADDF01A3A58F022C805FE7FBA61504EE9E3FC29051D15D96925FE4908DC212A7F8B48B4359410DB6C71EEB6FE6C21EAAD5982C704490AFA8BC1AEF22DCB414E9374213164AACABB17CE3C05BABEBC47078641134B7D45C1991018E96197883FDEF4F65326A78C77C52662C45346591D94E8E3494AF747D1A55</code></pre>
<pre><code>encrypted_data = 936F4E722A7FAD6B4E2CBA03A6D7DEBF69714074077E4B0BC9FA4E1D6F0633F64EB8A58895E239CB10972BB141D19290DC0F8A77CB798884DD72BAAB556522C8768A1EA223A2F980A67CF4F132BB962E8F1E8DC5BC6B6EEC6A476ABBC5115B289700BD81C2A2E143F3614269A7977C2D9B63C7B265A072C5864023DE8599D9B842321721195D547E0A7C75ED8B354918C1D02E77E9A7F28258F2C9BEB94FD5EFD739DF748228D3B3272CF1951CE392971B811C83E4ED28D59555833920270B1E028351A604C82013D3D9A731429AB78735E5E8E3E543CC5A46E3761D33E5CDB99C84949100203E84F8597CFB31C69991515053D383F6E2E2A13CB3977A551C42</code></pre>
<!-- end p_q_inner_data_output -->
<p>The length of the final string is 256 bytes.</p>
<h5><a class="anchor" href="#5-send-req-dh-params-query-with-generated-encrypted-data" id="5-send-req-dh-params-query-with-generated-encrypted-data" name="5-send-req-dh-params-query-with-generated-encrypted-data"><i class="anchor-icon"></i></a>5) Send req_DH_params query with generated <code>encrypted_data</code></h5>
<!-- start req_DH_params -->
<p>Sent payload (excluding transport headers/trailers):</p>
<pre><code>0000 | 00 00 00 00 00 00 00 00 EC C8 09 00 54 C6 38 67
0010 | 40 01 00 00 BE E4 12 D7 D0 EA B0 A3 DD 8B 65 05
0020 | 20 F1 6A 47 11 72 C2 18 C0 92 69 C7 22 14 AE DD
0030 | E8 96 CA 82 5F 21 C7 3B 04 46 D0 88 AD 00 00 00
0040 | 04 74 18 A5 63 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 AE 78 99 4C 63 A6 46 8C CB 77 EF 2A
0060 | A9 0C 37 37 39 5D 68 89 54 41 48 F0 30 B5 98 41
0070 | 83 2F FD BC FA 88 B6 44 08 16 9C 67 FE E8 80 04
0080 | 2C AF 2A 1A 60 55 75 64 51 47 29 82 A4 67 D8 7F
0090 | 46 2F 17 9C 68 76 0A 3D 74 65 74 88 18 38 AB FC
00A0 | 14 D2 0A 9D E5 DB 97 AA 78 62 9F 13 64 6B 86 D5
00B0 | AE DC 34 41 87 85 8C 0B D6 10 21 81 81 00 7E 75
00C0 | 64 5C D2 EC 5F 0E A9 3F 1C A3 77 CA 0E 0D 23 AC
00D0 | 48 4E 15 8C 5B D7 79 94 6A 9A 81 AD DF 01 A3 A5
00E0 | 8F 02 2C 80 5F E7 FB A6 15 04 EE 9E 3F C2 90 51
00F0 | D1 5D 96 92 5F E4 90 8D C2 12 A7 F8 B4 8B 43 59
0100 | 41 0D B6 C7 1E EB 6F E6 C2 1E AA D5 98 2C 70 44
0110 | 90 AF A8 BC 1A EF 22 DC B4 14 E9 37 42 13 16 4A
0120 | AC AB B1 7C E3 C0 5B AB EB C4 70 78 64 11 34 B7
0130 | D4 5C 19 91 01 8E 96 19 78 83 FD EF 4F 65 32 6A
0140 | 78 C7 7C 52 66 2C 45 34 65 91 D9 4E 8E 34 94 AF
0150 | 74 7D 1A 55</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 78 24 08 00 92 CB 38 67
0010 | 40 01 00 00 BE E4 12 D7 1B BA D0 0E 11 31 66 36
0020 | C1 B9 C0 4B 10 94 49 91 16 A1 6B FD 31 17 CE 50
0030 | 63 59 3B 17 F8 B8 92 01 04 69 8D 55 19 00 00 00
0040 | 04 70 2D 02 91 00 00 00 85 FD 64 DE 85 1D 9D D0
0050 | FE 00 01 00 93 6F 4E 72 2A 7F AD 6B 4E 2C BA 03
0060 | A6 D7 DE BF 69 71 40 74 07 7E 4B 0B C9 FA 4E 1D
0070 | 6F 06 33 F6 4E B8 A5 88 95 E2 39 CB 10 97 2B B1
0080 | 41 D1 92 90 DC 0F 8A 77 CB 79 88 84 DD 72 BA AB
0090 | 55 65 22 C8 76 8A 1E A2 23 A2 F9 80 A6 7C F4 F1
00A0 | 32 BB 96 2E 8F 1E 8D C5 BC 6B 6E EC 6A 47 6A BB
00B0 | C5 11 5B 28 97 00 BD 81 C2 A2 E1 43 F3 61 42 69
00C0 | A7 97 7C 2D 9B 63 C7 B2 65 A0 72 C5 86 40 23 DE
00D0 | 85 99 D9 B8 42 32 17 21 19 5D 54 7E 0A 7C 75 ED
00E0 | 8B 35 49 18 C1 D0 2E 77 E9 A7 F2 82 58 F2 C9 BE
00F0 | B9 4F D5 EF D7 39 DF 74 82 28 D3 B3 27 2C F1 95
0100 | 1C E3 92 97 1B 81 1C 83 E4 ED 28 D5 95 55 83 39
0110 | 20 27 0B 1E 02 83 51 A6 04 C8 20 13 D3 D9 A7 31
0120 | 42 9A B7 87 35 E5 E8 E3 E5 43 CC 5A 46 E3 76 1D
0130 | 33 E5 CD B9 9C 84 94 91 00 20 3E 84 F8 59 7C FB
0140 | 31 C6 99 91 51 50 53 D3 83 F6 E2 E2 A1 3C B3 97
0150 | 7A 55 1C 42</code></pre>
<p>Payload (de)serialization:</p>
<pre><code>req_DH_params#d712e4be nonce:int128 server_nonce:int128 p:string q:string public_key_fingerprint:long encrypted_data:string = Server_DH_Params;</code></pre>
<table class="table">
@ -345,7 +345,7 @@ random_padding_bytes = C5E87EBF5506A6686F2E82264FA171E50FE4FB4E2D02950EE5AF74242
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>ECC8090054C63867</code></td>
<td><code>7824080092CB3867</code></td>
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() &lt;&lt; 32) + (N*4)</td>
</tr>
<tr>
@ -363,25 +363,25 @@ random_padding_bytes = C5E87EBF5506A6686F2E82264FA171E50FE4FB4E2D02950EE5AF74242
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>D0EAB0A3DD8B650520F16A471172C218</code></td>
<td><code>1BBAD00E11316636C1B9C04B10944991</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>C09269C72214AEDDE896CA825F21C73B</code></td>
<td><code>16A16BFD3117CE5063593B17F8B89201</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>p</td>
<td>56, 8</td>
<td><code>0446D088AD000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1188071597</td>
<td><code>04698D5519000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1770870041</td>
<td>First prime cofactor: single-byte prefix denoting length, 4-byte string, and three bytes of padding</td>
</tr>
<tr>
<td>q</td>
<td>64, 8</td>
<td><code>047418A563000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1947772259</td>
<td><code>04702D0291000000</code><br>TL byte deserialization <br>=&gt; bigendian conversion to decimal<br>=&gt; 1881997969</td>
<td>Second prime cofactor: single-byte prefix denoting length, 4-byte string, and three bytes of padding</td>
</tr>
<tr>
@ -393,7 +393,7 @@ random_padding_bytes = C5E87EBF5506A6686F2E82264FA171E50FE4FB4E2D02950EE5AF74242
<tr>
<td>encrypted_data</td>
<td>80, 260</td>
<td><code>FE000100AE78994C63A6468CCB77EF2A</code> <code>A90C3737395D6889544148F030B59841</code> <code>832FFDBCFA88B64408169C67FEE88004</code> <code>2CAF2A1A6055756451472982A467D87F</code> <code>462F179C68760A3D746574881838ABFC</code> <code>14D20A9DE5DB97AA78629F13646B86D5</code> <code>AEDC344187858C0BD610218181007E75</code> <code>645CD2EC5F0EA93F1CA377CA0E0D23AC</code> <code>484E158C5BD779946A9A81ADDF01A3A5</code> <code>8F022C805FE7FBA61504EE9E3FC29051</code> <code>D15D96925FE4908DC212A7F8B48B4359</code> <code>410DB6C71EEB6FE6C21EAAD5982C7044</code> <code>90AFA8BC1AEF22DCB414E9374213164A</code> <code>ACABB17CE3C05BABEBC47078641134B7</code> <code>D45C1991018E96197883FDEF4F65326A</code> <code>78C77C52662C45346591D94E8E3494AF</code><br> <code>747D1A55</code></td>
<td><code>FE000100936F4E722A7FAD6B4E2CBA03</code> <code>A6D7DEBF69714074077E4B0BC9FA4E1D</code> <code>6F0633F64EB8A58895E239CB10972BB1</code> <code>41D19290DC0F8A77CB798884DD72BAAB</code> <code>556522C8768A1EA223A2F980A67CF4F1</code> <code>32BB962E8F1E8DC5BC6B6EEC6A476ABB</code> <code>C5115B289700BD81C2A2E143F3614269</code> <code>A7977C2D9B63C7B265A072C5864023DE</code> <code>8599D9B842321721195D547E0A7C75ED</code> <code>8B354918C1D02E77E9A7F28258F2C9BE</code> <code>B94FD5EFD739DF748228D3B3272CF195</code> <code>1CE392971B811C83E4ED28D595558339</code> <code>20270B1E028351A604C82013D3D9A731</code> <code>429AB78735E5E8E3E543CC5A46E3761D</code> <code>33E5CDB99C84949100203E84F8597CFB</code> <code>31C69991515053D383F6E2E2A13CB397</code><br> <code>7A551C42</code></td>
<td>Value generated above</td>
</tr>
</tbody>
@ -402,47 +402,47 @@ random_padding_bytes = C5E87EBF5506A6686F2E82264FA171E50FE4FB4E2D02950EE5AF74242
<h5><a class="anchor" href="#6-server-responds-with" id="6-server-responds-with" name="6-server-responds-with"><i class="anchor-icon"></i></a>6) Server responds with:</h5>
<!-- start server_DH_params_ok -->
<p>Received payload (excluding transport headers/trailers):</p>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 34 61 DB 54 C6 38 67
0010 | 78 02 00 00 5C 07 E8 D0 D0 EA B0 A3 DD 8B 65 05
0020 | 20 F1 6A 47 11 72 C2 18 C0 92 69 C7 22 14 AE DD
0030 | E8 96 CA 82 5F 21 C7 3B FE 50 02 00 E2 81 79 2B
0040 | CD 6A 41 60 25 9D 11 31 C7 54 4C CF B5 64 6A AB
0050 | BE 8C 04 86 DF FD 11 F4 6E 8D 3F 09 CC 6A 72 63
0060 | FB 11 B8 5E 07 63 44 BE 2D 65 14 B7 00 E6 20 8C
0070 | 5F 52 27 75 29 50 A0 9C C5 2B 03 01 F7 13 71 C4
0080 | BF BC C8 90 99 29 42 A7 0D A9 B2 BD 81 01 37 6D
0090 | 5C 58 11 B6 03 BB 3D A5 FB A0 75 55 57 30 A2 B5
00A0 | EF 6C 5F 2F 50 26 10 25 26 52 0C 65 D7 CB 1B 01
00B0 | 88 3E BC E0 18 31 3C 49 49 01 95 D7 7B B1 53 79
00C0 | C8 C2 97 AB 55 17 54 39 96 C1 D5 9F 4E 98 D7 F4
00D0 | CA A4 68 59 D9 05 5A CA 8C 2F C6 77 B5 FC D4 52
00E0 | 90 24 96 64 FD F2 63 F8 2D F2 2C FF CF 6B FB 0C
00F0 | 5B 55 7C 03 BB 43 46 24 04 4D 65 4F 88 C8 6F B1
0100 | FB 7A 46 CA AF 33 41 12 01 35 7E F9 36 D8 1F C9
0110 | 03 BE CF 23 DF 13 74 FE 3C 8E EB C3 DA 01 B4 4D
0120 | 05 47 70 7F 44 54 D4 24 CC 76 A2 D0 82 57 38 2B
0130 | 95 AD CC 6E A6 3C F1 5F 36 50 84 D4 2A 64 F2 6E
0140 | 0A 0B 62 3E F4 F9 9A CE B1 33 22 CF 24 79 5C 50
0150 | B0 1C D9 40 37 DE 1A DD 31 76 6C 18 E9 7A FA BA
0160 | 5D 62 BC 9F C6 D0 F2 90 84 31 6D 7F 25 55 60 97
0170 | 3D D1 5D 08 4B 6B D8 D1 D5 65 F5 D0 0A 93 74 DF
0180 | 40 4A 28 DB CB F1 4F 95 4D C9 35 05 B4 68 3B D6
0190 | BF AF 79 7F 8B E5 E6 E6 09 A7 B4 FB F1 C3 6E A7
01A0 | 5F FF 8F 33 30 F5 61 6F 6D 72 7C CA 6A B8 40 A8
01B0 | 53 30 92 F2 12 92 91 3F B0 45 C0 1E A6 FB 0F 86
01C0 | 79 2E C4 50 D2 4F 1A 12 F4 21 B6 41 C8 35 1F DA
01D0 | E2 B3 A7 B2 E2 C0 D4 9C 93 5A 96 1E 8F 99 5B C8
01E0 | AB 14 B3 C4 06 50 20 95 8E FE 4F 2D C4 08 80 C7
01F0 | 68 A7 A9 5B 3D 61 5A D7 74 83 F6 DB E6 21 FE 58
0200 | 51 DD 21 5C C2 89 B4 23 8C 92 C9 C7 3B 3C F6 E8
0210 | 63 82 C2 F6 71 66 EE 1B BD E8 D9 A3 6B 6F D9 72
0220 | DD 4D E6 72 7A 9B 4F F4 79 C6 46 98 86 BA 70 1D
0230 | 85 15 6E D9 8D 62 4B 8B 09 60 0C 7F 64 69 C4 4D
0240 | 9C 8D F8 99 08 B9 7C 79 8F E0 A7 E7 A8 0A 15 80
0250 | 38 F5 0A 6C F0 3E 9F 93 4A 88 14 57 28 F1 4F 77
0260 | C8 39 FA 66 5E 42 B4 D3 68 FB A8 EE B9 FE 82 9D
0270 | 9D 2D 2D 2E 16 C8 FB 3F 17 AF 0B 02 00 1E 7B 19
0280 | EA EF 27 88 27 EA 54 2A 6F 62 D5 00</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 14 A5 E9 92 CB 38 67
0010 | 78 02 00 00 5C 07 E8 D0 1B BA D0 0E 11 31 66 36
0020 | C1 B9 C0 4B 10 94 49 91 16 A1 6B FD 31 17 CE 50
0030 | 63 59 3B 17 F8 B8 92 01 FE 50 02 00 8D 26 F0 C9
0040 | 96 D5 F3 CB 54 0A 5C F4 38 C8 B3 0E 75 FC 43 5B
0050 | B5 50 E3 BC ED C8 97 A0 74 D5 A9 5A EB BB 2F 1E
0060 | 51 14 99 E5 2E C4 08 9E E3 63 E4 DE 4F 46 64 1D
0070 | FA 7B BF EC B9 AA 64 23 05 2A 09 05 89 5D 0F 4D
0080 | 71 86 BE 92 F1 82 08 CD 64 81 E7 15 40 B2 30 E9
0090 | 2C 44 97 9D 07 63 5A AE A6 E8 6F CC 01 3A 85 B2
00A0 | 2F 0A 6F 24 95 E9 48 20 EE 0E 3D E2 36 80 89 D3
00B0 | E1 D3 34 CA D0 F6 74 F5 26 D0 09 E0 B2 A4 0D B3
00C0 | F1 1A F7 A9 3A 3C CA 1E 1F 72 6E 0C CD 13 0F 48
00D0 | DD 42 72 A8 74 65 3B 3C 5E DD F7 2A BD 7B FA B9
00E0 | 06 79 C1 3D 71 A8 C4 4C C1 AA 4A BC E9 A1 36 AB
00F0 | 82 6F 17 9E 8F 43 B7 FE A5 EC AC 67 E4 3B 85 F4
0100 | C2 21 3F F3 59 16 D0 2F 23 C3 C7 55 D7 BE 1D 32
0110 | 8B B0 64 C9 FF 38 4B 60 40 6E 46 19 BD 42 4E 6B
0120 | 5C 7E 8A 48 BF 95 B4 04 D9 93 AB 85 6B B3 89 8F
0130 | 74 A4 9C C4 E2 74 EA C5 21 C0 55 0F D7 9C 30 C2
0140 | 9D F8 0B D0 13 BD 1B 62 B2 80 3F 3F C1 5B 14 DF
0150 | 86 75 69 8C F3 E9 0A 05 FA 95 4A 30 9B 7A 2C AD
0160 | 84 DA 57 C2 81 1D D9 1A FA D1 75 D8 B3 07 D8 62
0170 | 7E EC E5 66 8C FF 2D FA AE 23 4B A9 FB DE 8A 2F
0180 | C1 A7 2E 9A 02 5D B0 AD 67 4F 28 90 25 E2 FC FB
0190 | 28 44 61 23 66 86 80 46 EB 47 8E 1F 62 F8 B1 DF
01A0 | 57 9F A9 53 EF C1 05 FD 74 9F E1 57 D9 19 B7 FE
01B0 | 1F A1 53 FF 1F C6 1E BB 90 CD 63 8C 62 47 F6 9C
01C0 | 28 82 2D 42 08 7A CB 53 1F B8 AA D5 27 AD 3C 1B
01D0 | 50 54 11 08 27 88 AD 7E 5F 8F AE 6E 9D B8 1B 28
01E0 | 82 7A 13 AC 8B 0A 27 07 9B A3 51 CD 24 18 77 1B
01F0 | 69 B7 99 BF E2 27 9F 90 6C 6D 74 7F 7E 76 2D E5
0200 | 5A F2 3F E4 81 8B DE 49 DA 8B 92 50 38 2C 03 8F
0210 | 75 D0 38 2B 51 F9 39 39 08 A0 6C 6C A9 7B 28 C2
0220 | 86 CA B1 74 5B AC B4 0E FF 8F F8 27 14 51 A4 BE
0230 | 9C C6 7D DC C2 4E CE 7A 18 98 04 A8 56 41 2F EF
0240 | C7 A5 DA CB 16 4C 45 3C 05 F3 DD A5 AD 23 16 CF
0250 | 9C 9E 0F 1D 25 DF EA 13 86 4A 75 6E 8B CA F6 B0
0260 | 33 5B 86 C9 76 88 41 D7 88 62 FD 66 A3 61 0B D4
0270 | D2 32 FD FE 52 5D 80 82 B4 BF DB B7 95 07 56 54
0280 | 2A 13 6D 9F E8 37 15 82 81 B2 E3 85</code></pre>
<p>Payload (de)serialization:</p>
<pre><code>server_DH_params_ok#d0e8075c nonce:int128 server_nonce:int128 encrypted_answer:string = Server_DH_Params;</code></pre>
<table class="table">
@ -464,7 +464,7 @@ random_padding_bytes = C5E87EBF5506A6686F2E82264FA171E50FE4FB4E2D02950EE5AF74242
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>013461DB54C63867</code></td>
<td><code>0114A5E992CB3867</code></td>
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() &lt;&lt; 32) + (N*4)</td>
</tr>
<tr>
@ -482,19 +482,19 @@ random_padding_bytes = C5E87EBF5506A6686F2E82264FA171E50FE4FB4E2D02950EE5AF74242
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>D0EAB0A3DD8B650520F16A471172C218</code></td>
<td><code>1BBAD00E11316636C1B9C04B10944991</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>C09269C72214AEDDE896CA825F21C73B</code></td>
<td><code>16A16BFD3117CE5063593B17F8B89201</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_answer</td>
<td>56, 596</td>
<td><code>FE500200E281792BCD6A4160259D1131</code> <code>C7544CCFB5646AABBE8C0486DFFD11F4</code> <code>6E8D3F09CC6A7263FB11B85E076344BE</code> <code>2D6514B700E6208C5F5227752950A09C</code> <code>C52B0301F71371C4BFBCC890992942A7</code> <code>0DA9B2BD8101376D5C5811B603BB3DA5</code> <code>FBA075555730A2B5EF6C5F2F50261025</code> <code>26520C65D7CB1B01883EBCE018313C49</code> <code>490195D77BB15379C8C297AB55175439</code> <code>96C1D59F4E98D7F4CAA46859D9055ACA</code> <code>8C2FC677B5FCD45290249664FDF263F8</code> <code>2DF22CFFCF6BFB0C5B557C03BB434624</code> <code>044D654F88C86FB1FB7A46CAAF334112</code> <code>01357EF936D81FC903BECF23DF1374FE</code> <code>3C8EEBC3DA01B44D0547707F4454D424</code> <code>CC76A2D08257382B95ADCC6EA63CF15F</code> <code>365084D42A64F26E0A0B623EF4F99ACE</code> <code>B13322CF24795C50B01CD94037DE1ADD</code> <code>31766C18E97AFABA5D62BC9FC6D0F290</code> <code>84316D7F255560973DD15D084B6BD8D1</code> <code>D565F5D00A9374DF404A28DBCBF14F95</code> <code>4DC93505B4683BD6BFAF797F8BE5E6E6</code> <code>09A7B4FBF1C36EA75FFF8F3330F5616F</code> <code>6D727CCA6AB840A8533092F21292913F</code> <code>B045C01EA6FB0F86792EC450D24F1A12</code> <code>F421B641C8351FDAE2B3A7B2E2C0D49C</code> <code>935A961E8F995BC8AB14B3C406502095</code> <code>8EFE4F2DC40880C768A7A95B3D615AD7</code> <code>7483F6DBE621FE5851DD215CC289B423</code> <code>8C92C9C73B3CF6E86382C2F67166EE1B</code> <code>BDE8D9A36B6FD972DD4DE6727A9B4FF4</code> <code>79C6469886BA701D85156ED98D624B8B</code> <code>09600C7F6469C44D9C8DF89908B97C79</code> <code>8FE0A7E7A80A158038F50A6CF03E9F93</code> <code>4A88145728F14F77C839FA665E42B4D3</code> <code>68FBA8EEB9FE829D9D2D2D2E16C8FB3F</code> <code>17AF0B02001E7B19EAEF278827EA542A</code><br> <code>6F62D500</code></td>
<td><code>FE5002008D26F0C996D5F3CB540A5CF4</code> <code>38C8B30E75FC435BB550E3BCEDC897A0</code> <code>74D5A95AEBBB2F1E511499E52EC4089E</code> <code>E363E4DE4F46641DFA7BBFECB9AA6423</code> <code>052A0905895D0F4D7186BE92F18208CD</code> <code>6481E71540B230E92C44979D07635AAE</code> <code>A6E86FCC013A85B22F0A6F2495E94820</code> <code>EE0E3DE2368089D3E1D334CAD0F674F5</code> <code>26D009E0B2A40DB3F11AF7A93A3CCA1E</code> <code>1F726E0CCD130F48DD4272A874653B3C</code> <code>5EDDF72ABD7BFAB90679C13D71A8C44C</code> <code>C1AA4ABCE9A136AB826F179E8F43B7FE</code> <code>A5ECAC67E43B85F4C2213FF35916D02F</code> <code>23C3C755D7BE1D328BB064C9FF384B60</code> <code>406E4619BD424E6B5C7E8A48BF95B404</code> <code>D993AB856BB3898F74A49CC4E274EAC5</code> <code>21C0550FD79C30C29DF80BD013BD1B62</code> <code>B2803F3FC15B14DF8675698CF3E90A05</code> <code>FA954A309B7A2CAD84DA57C2811DD91A</code> <code>FAD175D8B307D8627EECE5668CFF2DFA</code> <code>AE234BA9FBDE8A2FC1A72E9A025DB0AD</code> <code>674F289025E2FCFB2844612366868046</code> <code>EB478E1F62F8B1DF579FA953EFC105FD</code> <code>749FE157D919B7FE1FA153FF1FC61EBB</code> <code>90CD638C6247F69C28822D42087ACB53</code> <code>1FB8AAD527AD3C1B505411082788AD7E</code> <code>5F8FAE6E9DB81B28827A13AC8B0A2707</code> <code>9BA351CD2418771B69B799BFE2279F90</code> <code>6C6D747F7E762DE55AF23FE4818BDE49</code> <code>DA8B9250382C038F75D0382B51F93939</code> <code>08A06C6CA97B28C286CAB1745BACB40E</code> <code>FF8FF8271451A4BE9CC67DDCC24ECE7A</code> <code>189804A856412FEFC7A5DACB164C453C</code> <code>05F3DDA5AD2316CF9C9E0F1D25DFEA13</code> <code>864A756E8BCAF6B0335B86C9768841D7</code> <code>8862FD66A3610BD4D232FDFE525D8082</code> <code>B4BFDBB7950756542A136D9FE8371582</code><br> <code>81B2E385</code></td>
<td>See below</td>
</tr>
</tbody>
@ -502,20 +502,20 @@ random_padding_bytes = C5E87EBF5506A6686F2E82264FA171E50FE4FB4E2D02950EE5AF74242
<!-- end server_DH_params_ok -->
<p>Decrypt <code>encrypted_answer</code> using the reverse of the process specified in <a href="/mtproto/auth_key#6-server-responds-with">step 6</a>:</p>
<!-- start server_DH_inner_data_input -->
<pre><code>encrypted_answer = E281792BCD6A4160259D1131C7544CCFB5646AABBE8C0486DFFD11F46E8D3F09CC6A7263FB11B85E076344BE2D6514B700E6208C5F5227752950A09CC52B0301F71371C4BFBCC890992942A70DA9B2BD8101376D5C5811B603BB3DA5FBA075555730A2B5EF6C5F2F5026102526520C65D7CB1B01883EBCE018313C49490195D77BB15379C8C297AB5517543996C1D59F4E98D7F4CAA46859D9055ACA8C2FC677B5FCD45290249664FDF263F82DF22CFFCF6BFB0C5B557C03BB434624044D654F88C86FB1FB7A46CAAF33411201357EF936D81FC903BECF23DF1374FE3C8EEBC3DA01B44D0547707F4454D424CC76A2D08257382B95ADCC6EA63CF15F365084D42A64F26E0A0B623EF4F99ACEB13322CF24795C50B01CD94037DE1ADD31766C18E97AFABA5D62BC9FC6D0F29084316D7F255560973DD15D084B6BD8D1D565F5D00A9374DF404A28DBCBF14F954DC93505B4683BD6BFAF797F8BE5E6E609A7B4FBF1C36EA75FFF8F3330F5616F6D727CCA6AB840A8533092F21292913FB045C01EA6FB0F86792EC450D24F1A12F421B641C8351FDAE2B3A7B2E2C0D49C935A961E8F995BC8AB14B3C4065020958EFE4F2DC40880C768A7A95B3D615AD77483F6DBE621FE5851DD215CC289B4238C92C9C73B3CF6E86382C2F67166EE1BBDE8D9A36B6FD972DD4DE6727A9B4FF479C6469886BA701D85156ED98D624B8B09600C7F6469C44D9C8DF89908B97C798FE0A7E7A80A158038F50A6CF03E9F934A88145728F14F77C839FA665E42B4D368FBA8EEB9FE829D9D2D2D2E16C8FB3F17AF0B02001E7B19EAEF278827EA542A6F62D500
tmp_aes_key = 500A86A5C1A48EEC49A928D5A837894717D878F8DFD428AC0E1EAA0EA3BD6B7A
tmp_aes_iv = 8EB36DA465A02A0D27F18BEE711126529DC69B0284C784311B96AD1DB2CA4D77</code></pre>
<pre><code>encrypted_answer = 8D26F0C996D5F3CB540A5CF438C8B30E75FC435BB550E3BCEDC897A074D5A95AEBBB2F1E511499E52EC4089EE363E4DE4F46641DFA7BBFECB9AA6423052A0905895D0F4D7186BE92F18208CD6481E71540B230E92C44979D07635AAEA6E86FCC013A85B22F0A6F2495E94820EE0E3DE2368089D3E1D334CAD0F674F526D009E0B2A40DB3F11AF7A93A3CCA1E1F726E0CCD130F48DD4272A874653B3C5EDDF72ABD7BFAB90679C13D71A8C44CC1AA4ABCE9A136AB826F179E8F43B7FEA5ECAC67E43B85F4C2213FF35916D02F23C3C755D7BE1D328BB064C9FF384B60406E4619BD424E6B5C7E8A48BF95B404D993AB856BB3898F74A49CC4E274EAC521C0550FD79C30C29DF80BD013BD1B62B2803F3FC15B14DF8675698CF3E90A05FA954A309B7A2CAD84DA57C2811DD91AFAD175D8B307D8627EECE5668CFF2DFAAE234BA9FBDE8A2FC1A72E9A025DB0AD674F289025E2FCFB2844612366868046EB478E1F62F8B1DF579FA953EFC105FD749FE157D919B7FE1FA153FF1FC61EBB90CD638C6247F69C28822D42087ACB531FB8AAD527AD3C1B505411082788AD7E5F8FAE6E9DB81B28827A13AC8B0A27079BA351CD2418771B69B799BFE2279F906C6D747F7E762DE55AF23FE4818BDE49DA8B9250382C038F75D0382B51F9393908A06C6CA97B28C286CAB1745BACB40EFF8FF8271451A4BE9CC67DDCC24ECE7A189804A856412FEFC7A5DACB164C453C05F3DDA5AD2316CF9C9E0F1D25DFEA13864A756E8BCAF6B0335B86C9768841D78862FD66A3610BD4D232FDFE525D8082B4BFDBB7950756542A136D9FE837158281B2E385
tmp_aes_key = 4298A03F609E0E3E1493BBFA37FB311E80D1DDEB1E7B88D01BF827B807D1DB5E
tmp_aes_iv = 2D165A15D4C176A7989F0620676F514FE0065D1FB2A918EA80FDDEDF86F35B10</code></pre>
<!-- end server_DH_inner_data_input -->
<p>Yielding:</p>
<!-- start server_DH_inner_data_output -->
<pre><code>answer_with_hash = 4A53BA2E1CBA9F048BE7276F81F46EBF076CA782BA0D89B5D0EAB0A3DD8B650520F16A471172C218C09269C72214AEDDE896CA825F21C73B03000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE00010074F465AF8A0A99C0B7A81E2E0049B0CFE4D6B9CE06F3D1874C7B11450CF8A756295506E52A55333DE8C730599FC24AD8A6D6D4300C361BF630993B1B07B03C24A18BFFE28CBCD486C4BDC7C6C457973884DB08581ABEAB4B35AF9734F25864E32CB12808ABBCBA839808DB177FF99108BE90A12D0B18D1675D1879D18B7591443A7AA724CD424AE70D7CAB61A09F9158C2ED3F2D5A8111B34CB2D35152B8079B6545919A970D188A07723F620DB7B039C7CAF59966C9018EDB4BF985A50F9D0F9A9E8ABE2E7E05EE6069CCB7FE20769ABC376355C73B3A67236AE23FF1AC2906EDAFFB58AB48D5FBE5903EED3723EF0EAEDFB7CC6FA2781052D654D4D38BEA5F54C6386712B103F824EADAAA
answer = BA0D89B5D0EAB0A3DD8B650520F16A471172C218C09269C72214AEDDE896CA825F21C73B03000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE00010074F465AF8A0A99C0B7A81E2E0049B0CFE4D6B9CE06F3D1874C7B11450CF8A756295506E52A55333DE8C730599FC24AD8A6D6D4300C361BF630993B1B07B03C24A18BFFE28CBCD486C4BDC7C6C457973884DB08581ABEAB4B35AF9734F25864E32CB12808ABBCBA839808DB177FF99108BE90A12D0B18D1675D1879D18B7591443A7AA724CD424AE70D7CAB61A09F9158C2ED3F2D5A8111B34CB2D35152B8079B6545919A970D188A07723F620DB7B039C7CAF59966C9018EDB4BF985A50F9D0F9A9E8ABE2E7E05EE6069CCB7FE20769ABC376355C73B3A67236AE23FF1AC2906EDAFFB58AB48D5FBE5903EED3723EF0EAEDFB7CC6FA2781052D654D4D38BEA5F54C6386712B103F824EADAAA</code></pre>
<pre><code>answer_with_hash = 57AA45D5977ABE021682E970D99A2408B6F11B24BA0D89B51BBAD00E11316636C1B9C04B1094499116A16BFD3117CE5063593B17F8B8920103000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE00010079B54F6278D32651D98B5ECCB4B86CF581CA0C9BC52C3A91D7DBE60CCCDAC314E210C31020688D95A2E4E0EDA5FA249E666D8543F2006147AFC30C97B5DD17D132C97D73E5370E0AA307054662DACED3E31E55FE8C0DBB7A6299E20FBD3F11CDECD388916A625B7C3FA4DCA90C4EBBDC1045BA699F187998B270CA2909E9440123692C479D8B3E3634B86D16C021F12B3AD2EBE2D8AD4CBAA897A1C43DEBD72D9AE320A27A1239229760726FDF36A2CC5170096DFA792E232738183C2D0B5BF3DFA395DCD6EC5642C235C36B24667B50B70118770869189D69D90B2F6B5A55928E6FBCED52B467E739E66926285A62238B9F8484105280556367EFD4AA7FC56A92CB3867F7977AE980373BD0
answer = BA0D89B51BBAD00E11316636C1B9C04B1094499116A16BFD3117CE5063593B17F8B8920103000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE00010079B54F6278D32651D98B5ECCB4B86CF581CA0C9BC52C3A91D7DBE60CCCDAC314E210C31020688D95A2E4E0EDA5FA249E666D8543F2006147AFC30C97B5DD17D132C97D73E5370E0AA307054662DACED3E31E55FE8C0DBB7A6299E20FBD3F11CDECD388916A625B7C3FA4DCA90C4EBBDC1045BA699F187998B270CA2909E9440123692C479D8B3E3634B86D16C021F12B3AD2EBE2D8AD4CBAA897A1C43DEBD72D9AE320A27A1239229760726FDF36A2CC5170096DFA792E232738183C2D0B5BF3DFA395DCD6EC5642C235C36B24667B50B70118770869189D69D90B2F6B5A55928E6FBCED52B467E739E66926285A62238B9F8484105280556367EFD4AA7FC56A92CB3867F7977AE980373BD0</code></pre>
<!-- end server_DH_inner_data_output -->
<!-- start server_DH_inner_data -->
<p>Generated payload (excluding transport headers/trailers):</p>
<pre><code>0000 | BA 0D 89 B5 D0 EA B0 A3 DD 8B 65 05 20 F1 6A 47
0010 | 11 72 C2 18 C0 92 69 C7 22 14 AE DD E8 96 CA 82
0020 | 5F 21 C7 3B 03 00 00 00 FE 00 01 00 C7 1C AE B9
<pre><code>0000 | BA 0D 89 B5 1B BA D0 0E 11 31 66 36 C1 B9 C0 4B
0010 | 10 94 49 91 16 A1 6B FD 31 17 CE 50 63 59 3B 17
0020 | F8 B8 92 01 03 00 00 00 FE 00 01 00 C7 1C AE B9
0030 | C6 B1 C9 04 8E 6C 52 2F 70 F1 3F 73 98 0D 40 23
0040 | 8E 3E 21 C1 49 34 D0 37 56 3D 93 0F 48 19 8A 0A
0050 | A7 C1 40 58 22 94 93 D2 25 30 F4 DB FA 33 6F 6E
@ -532,23 +532,23 @@ answer = BA0D89B5D0EAB0A3DD8B650520F16A471172C218C09269C72214AEDDE896CA825F21C73
0100 | F4 7B F9 59 D9 56 85 0C E9 29 85 1F 0D 81 15 F6
0110 | 35 B1 05 EE 2E 4E 15 D0 4B 24 54 BF 6F 4F AD F0
0120 | 34 B1 04 03 11 9C D8 E3 B9 2F CC 5B FE 00 01 00
0130 | 74 F4 65 AF 8A 0A 99 C0 B7 A8 1E 2E 00 49 B0 CF
0140 | E4 D6 B9 CE 06 F3 D1 87 4C 7B 11 45 0C F8 A7 56
0150 | 29 55 06 E5 2A 55 33 3D E8 C7 30 59 9F C2 4A D8
0160 | A6 D6 D4 30 0C 36 1B F6 30 99 3B 1B 07 B0 3C 24
0170 | A1 8B FF E2 8C BC D4 86 C4 BD C7 C6 C4 57 97 38
0180 | 84 DB 08 58 1A BE AB 4B 35 AF 97 34 F2 58 64 E3
0190 | 2C B1 28 08 AB BC BA 83 98 08 DB 17 7F F9 91 08
01A0 | BE 90 A1 2D 0B 18 D1 67 5D 18 79 D1 8B 75 91 44
01B0 | 3A 7A A7 24 CD 42 4A E7 0D 7C AB 61 A0 9F 91 58
01C0 | C2 ED 3F 2D 5A 81 11 B3 4C B2 D3 51 52 B8 07 9B
01D0 | 65 45 91 9A 97 0D 18 8A 07 72 3F 62 0D B7 B0 39
01E0 | C7 CA F5 99 66 C9 01 8E DB 4B F9 85 A5 0F 9D 0F
01F0 | 9A 9E 8A BE 2E 7E 05 EE 60 69 CC B7 FE 20 76 9A
0200 | BC 37 63 55 C7 3B 3A 67 23 6A E2 3F F1 AC 29 06
0210 | ED AF FB 58 AB 48 D5 FB E5 90 3E ED 37 23 EF 0E
0220 | AE DF B7 CC 6F A2 78 10 52 D6 54 D4 D3 8B EA 5F
0230 | 54 C6 38 67</code></pre>
0130 | 79 B5 4F 62 78 D3 26 51 D9 8B 5E CC B4 B8 6C F5
0140 | 81 CA 0C 9B C5 2C 3A 91 D7 DB E6 0C CC DA C3 14
0150 | E2 10 C3 10 20 68 8D 95 A2 E4 E0 ED A5 FA 24 9E
0160 | 66 6D 85 43 F2 00 61 47 AF C3 0C 97 B5 DD 17 D1
0170 | 32 C9 7D 73 E5 37 0E 0A A3 07 05 46 62 DA CE D3
0180 | E3 1E 55 FE 8C 0D BB 7A 62 99 E2 0F BD 3F 11 CD
0190 | EC D3 88 91 6A 62 5B 7C 3F A4 DC A9 0C 4E BB DC
01A0 | 10 45 BA 69 9F 18 79 98 B2 70 CA 29 09 E9 44 01
01B0 | 23 69 2C 47 9D 8B 3E 36 34 B8 6D 16 C0 21 F1 2B
01C0 | 3A D2 EB E2 D8 AD 4C BA A8 97 A1 C4 3D EB D7 2D
01D0 | 9A E3 20 A2 7A 12 39 22 97 60 72 6F DF 36 A2 CC
01E0 | 51 70 09 6D FA 79 2E 23 27 38 18 3C 2D 0B 5B F3
01F0 | DF A3 95 DC D6 EC 56 42 C2 35 C3 6B 24 66 7B 50
0200 | B7 01 18 77 08 69 18 9D 69 D9 0B 2F 6B 5A 55 92
0210 | 8E 6F BC ED 52 B4 67 E7 39 E6 69 26 28 5A 62 23
0220 | 8B 9F 84 84 10 52 80 55 63 67 EF D4 AA 7F C5 6A
0230 | 92 CB 38 67</code></pre>
<p>Payload (de)serialization:</p>
<pre><code>server_DH_inner_data#b5890dba nonce:int128 server_nonce:int128 g:int dh_prime:string g_a:string server_time:int = Server_DH_inner_data;</code></pre>
<table class="table">
@ -570,13 +570,13 @@ answer = BA0D89B5D0EAB0A3DD8B650520F16A471172C218C09269C72214AEDDE896CA825F21C73
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>D0EAB0A3DD8B650520F16A471172C218</code></td>
<td><code>1BBAD00E11316636C1B9C04B10944991</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>C09269C72214AEDDE896CA825F21C73B</code></td>
<td><code>16A16BFD3117CE5063593B17F8B89201</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
@ -594,13 +594,13 @@ answer = BA0D89B5D0EAB0A3DD8B650520F16A471172C218C09269C72214AEDDE896CA825F21C73
<tr>
<td>g_a</td>
<td>300, 260</td>
<td><code>FE00010074F465AF8A0A99C0B7A81E2E</code> <code>0049B0CFE4D6B9CE06F3D1874C7B1145</code> <code>0CF8A756295506E52A55333DE8C73059</code> <code>9FC24AD8A6D6D4300C361BF630993B1B</code> <code>07B03C24A18BFFE28CBCD486C4BDC7C6</code> <code>C457973884DB08581ABEAB4B35AF9734</code> <code>F25864E32CB12808ABBCBA839808DB17</code> <code>7FF99108BE90A12D0B18D1675D1879D1</code> <code>8B7591443A7AA724CD424AE70D7CAB61</code> <code>A09F9158C2ED3F2D5A8111B34CB2D351</code> <code>52B8079B6545919A970D188A07723F62</code> <code>0DB7B039C7CAF59966C9018EDB4BF985</code> <code>A50F9D0F9A9E8ABE2E7E05EE6069CCB7</code> <code>FE20769ABC376355C73B3A67236AE23F</code> <code>F1AC2906EDAFFB58AB48D5FBE5903EED</code> <code>3723EF0EAEDFB7CC6FA2781052D654D4</code><br> <code>D38BEA5F</code></td>
<td><code>FE00010079B54F6278D32651D98B5ECC</code> <code>B4B86CF581CA0C9BC52C3A91D7DBE60C</code> <code>CCDAC314E210C31020688D95A2E4E0ED</code> <code>A5FA249E666D8543F2006147AFC30C97</code> <code>B5DD17D132C97D73E5370E0AA3070546</code> <code>62DACED3E31E55FE8C0DBB7A6299E20F</code> <code>BD3F11CDECD388916A625B7C3FA4DCA9</code> <code>0C4EBBDC1045BA699F187998B270CA29</code> <code>09E9440123692C479D8B3E3634B86D16</code> <code>C021F12B3AD2EBE2D8AD4CBAA897A1C4</code> <code>3DEBD72D9AE320A27A1239229760726F</code> <code>DF36A2CC5170096DFA792E232738183C</code> <code>2D0B5BF3DFA395DCD6EC5642C235C36B</code> <code>24667B50B70118770869189D69D90B2F</code> <code>6B5A55928E6FBCED52B467E739E66926</code> <code>285A62238B9F8484105280556367EFD4</code><br> <code>AA7FC56A</code></td>
<td><code>g_a</code> diffie-hellman parameter</td>
</tr>
<tr>
<td>server_time</td>
<td>560, 4</td>
<td><code>54C63867</code> (1731774036 in decimal)</td>
<td><code>92CB3867</code> (1731775378 in decimal)</td>
<td>Server time</td>
</tr>
</tbody>
@ -609,34 +609,34 @@ answer = BA0D89B5D0EAB0A3DD8B650520F16A471172C218C09269C72214AEDDE896CA825F21C73
<h5><a class="anchor" href="#7-client-computes-random-2048-bit-number-b-using-a-sufficient-amount-of-entropy-and-sends-the-server-a-message" id="7-client-computes-random-2048-bit-number-b-using-a-sufficient-amount-of-entropy-and-sends-the-server-a-message" name="7-client-computes-random-2048-bit-number-b-using-a-sufficient-amount-of-entropy-and-sends-the-server-a-message"><i class="anchor-icon"></i></a>7) Client computes random 2048-bit number <em>b</em> (using a sufficient amount of entropy) and sends the server a message</h5>
<p>First, generate a secure random 2048-bit number b:</p>
<!-- start b -->
<pre><code>b = A6ABCBD417FA6C159FFB432FBB05DD071B682017A8ABAF34E147C7077B20B02180874DD787665AB2E39FAF96768F7546FC772DFC798D795A5D8EED4EB10B5A52E945E21C7EEA23C955B08B69FE8263F4726391DDC10D9BC7CC86CBF60E295EAE23C8D20564F192980B40E814FC23E4680244D7B42177CE5269B07E027E630D3F5D1B7173459D83BE1BDF9A8994D0CE622A5B6A697C67F0182D6433373EE0429F981D66F58FC5A6C3FB2202994DF5E2674AF29EE33D5758E6450D10EE404AC5464FEF64F198028227A7D47F3337AEE6FD89391435A7F0A8E6207EC168BB9D1AA63701F1C9676E7326D8931AA0FABF7952E74A3E743DD8EA17F7181DA97AAE607F</code></pre>
<pre><code>b = 958210AD1A17DD51C95AC4E7B36F56AE6B14C70D92BDA922BBC1DAA63F3DBB5933A8F292B825D8931528027AD4573A7D70654782A2D4CB8F58864C568C6F50D53C6F2FC51B7796F97B3DD487D35AFC7F00FBAC99C6D374C177CE7608C166EE147D4E84C13131AF6C20BBEBB5A7445FCEB84F5CFE21E3E796E83B1FB877CD9FF1EB60D48AC10744C216C343A2E569FA8FB18510CF07ABB3934676C910792D644ACB477364FF6B4812760BB73614E06C533592B8997F1CE138EC2E51C1C18CBD321B74A5B406937FEC0AFB5C3A32BA8173238AB57EE4749FE398843EB47FF11C0305CFDF73982BDDEE6A539B802D1FB90E576B2655CB044660922527341500A0D0</code></pre>
<!-- end b -->
<p>Then compute <code>g_b = pow(g, b) mod dh_prime</code></p>
<!-- start g_b -->
<pre><code>g_b = 3F605D936EFF386D9C76675E7FB4C11BB7AD14B6DAEF74F08307983308C7D60C9672A47322ECDF49A11D7E898694017245D5FE5558DE4EBDD536D4CEBC7EE0DEF85DAC6CA59701F211ABBB86039432D6F3858F0388E26621631C305A4E674631D28A2C8E31499DE7A1F510E10F80D2CF03DE486699E641640A9CBFF22E3CDAFF048F360E878E4D906721A1FFF6B6089DD96C5761090814BBD4F9293388ED3AB6C88ED10462F957DB51E702846E7A5967BFDE86C28D1E3624A92A65E7879CC216F54807DEC6AF6E261DB0CEA9AF6DD654108ADB690ECAB6FE2E4D667F5CFF456A66DD007F62D1BBE7BF3DD18D5CAE1EDF0D48FB51ECA0E7DF2302218612B28DB1</code></pre>
<pre><code>g_b = 56E2DCC5219A8FF364A6A7EFE1FF8F57B75CA81CF4AFCB975CE4967F5DC20A88A24EB3D79EBCFD5C955B177B8FEE2A2E15B9F98DB6FB4EC3E1E809960634E8C7109B41602749C969C1185ABB51964E565E1D054FCDF359E28B76FBBC70C57F56E5BB0FFD412AA46D2C85AD35DAB9A80C85891D123A2E2092D7AD556E40CA2CF53B6D45AA44306FC174D7F8AFDEC6E7B8049C7B1192A77982997313808CBD57E0FEBF4C8B2946BC807850E8A601457E4529498F114AAB22BD525F157916515737795BAB7ADD81F349CBF9F1119A2707396183A095281F9F3B93ADE18C10513196242857EAC8B2EE9431E1DFE24D56C33F9D8C8C8DB2FA259996C05E2170A4DAAA</code></pre>
<!-- end g_b -->
<h6>7.1) generation of encrypted_data</h6>
<!-- start client_DH_inner_data -->
<p>Generated payload (excluding transport headers/trailers):</p>
<pre><code>0000 | 54 B6 43 66 D0 EA B0 A3 DD 8B 65 05 20 F1 6A 47
0010 | 11 72 C2 18 C0 92 69 C7 22 14 AE DD E8 96 CA 82
0020 | 5F 21 C7 3B 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | 3F 60 5D 93 6E FF 38 6D 9C 76 67 5E 7F B4 C1 1B
0040 | B7 AD 14 B6 DA EF 74 F0 83 07 98 33 08 C7 D6 0C
0050 | 96 72 A4 73 22 EC DF 49 A1 1D 7E 89 86 94 01 72
0060 | 45 D5 FE 55 58 DE 4E BD D5 36 D4 CE BC 7E E0 DE
0070 | F8 5D AC 6C A5 97 01 F2 11 AB BB 86 03 94 32 D6
0080 | F3 85 8F 03 88 E2 66 21 63 1C 30 5A 4E 67 46 31
0090 | D2 8A 2C 8E 31 49 9D E7 A1 F5 10 E1 0F 80 D2 CF
00A0 | 03 DE 48 66 99 E6 41 64 0A 9C BF F2 2E 3C DA FF
00B0 | 04 8F 36 0E 87 8E 4D 90 67 21 A1 FF F6 B6 08 9D
00C0 | D9 6C 57 61 09 08 14 BB D4 F9 29 33 88 ED 3A B6
00D0 | C8 8E D1 04 62 F9 57 DB 51 E7 02 84 6E 7A 59 67
00E0 | BF DE 86 C2 8D 1E 36 24 A9 2A 65 E7 87 9C C2 16
00F0 | F5 48 07 DE C6 AF 6E 26 1D B0 CE A9 AF 6D D6 54
0100 | 10 8A DB 69 0E CA B6 FE 2E 4D 66 7F 5C FF 45 6A
0110 | 66 DD 00 7F 62 D1 BB E7 BF 3D D1 8D 5C AE 1E DF
0120 | 0D 48 FB 51 EC A0 E7 DF 23 02 21 86 12 B2 8D B1</code></pre>
<pre><code>0000 | 54 B6 43 66 1B BA D0 0E 11 31 66 36 C1 B9 C0 4B
0010 | 10 94 49 91 16 A1 6B FD 31 17 CE 50 63 59 3B 17
0020 | F8 B8 92 01 00 00 00 00 00 00 00 00 FE 00 01 00
0030 | 56 E2 DC C5 21 9A 8F F3 64 A6 A7 EF E1 FF 8F 57
0040 | B7 5C A8 1C F4 AF CB 97 5C E4 96 7F 5D C2 0A 88
0050 | A2 4E B3 D7 9E BC FD 5C 95 5B 17 7B 8F EE 2A 2E
0060 | 15 B9 F9 8D B6 FB 4E C3 E1 E8 09 96 06 34 E8 C7
0070 | 10 9B 41 60 27 49 C9 69 C1 18 5A BB 51 96 4E 56
0080 | 5E 1D 05 4F CD F3 59 E2 8B 76 FB BC 70 C5 7F 56
0090 | E5 BB 0F FD 41 2A A4 6D 2C 85 AD 35 DA B9 A8 0C
00A0 | 85 89 1D 12 3A 2E 20 92 D7 AD 55 6E 40 CA 2C F5
00B0 | 3B 6D 45 AA 44 30 6F C1 74 D7 F8 AF DE C6 E7 B8
00C0 | 04 9C 7B 11 92 A7 79 82 99 73 13 80 8C BD 57 E0
00D0 | FE BF 4C 8B 29 46 BC 80 78 50 E8 A6 01 45 7E 45
00E0 | 29 49 8F 11 4A AB 22 BD 52 5F 15 79 16 51 57 37
00F0 | 79 5B AB 7A DD 81 F3 49 CB F9 F1 11 9A 27 07 39
0100 | 61 83 A0 95 28 1F 9F 3B 93 AD E1 8C 10 51 31 96
0110 | 24 28 57 EA C8 B2 EE 94 31 E1 DF E2 4D 56 C3 3F
0120 | 9D 8C 8C 8D B2 FA 25 99 96 C0 5E 21 70 A4 DA AA</code></pre>
<p>Payload (de)serialization:</p>
<pre><code>client_DH_inner_data#6643b654 nonce:int128 server_nonce:int128 retry_id:long g_b:string = Client_DH_Inner_Data;</code></pre>
<table class="table">
@ -658,19 +658,19 @@ answer = BA0D89B5D0EAB0A3DD8B650520F16A471172C218C09269C72214AEDDE896CA825F21C73
<tr>
<td>nonce</td>
<td>4, 16</td>
<td><code>D0EAB0A3DD8B650520F16A471172C218</code></td>
<td><code>1BBAD00E11316636C1B9C04B10944991</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>20, 16</td>
<td><code>C09269C72214AEDDE896CA825F21C73B</code></td>
<td><code>16A16BFD3117CE5063593B17F8B89201</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>g_b</td>
<td>36, 260</td>
<td><code>FE0001003F605D936EFF386D9C76675E</code> <code>7FB4C11BB7AD14B6DAEF74F083079833</code> <code>08C7D60C9672A47322ECDF49A11D7E89</code> <code>8694017245D5FE5558DE4EBDD536D4CE</code> <code>BC7EE0DEF85DAC6CA59701F211ABBB86</code> <code>039432D6F3858F0388E26621631C305A</code> <code>4E674631D28A2C8E31499DE7A1F510E1</code> <code>0F80D2CF03DE486699E641640A9CBFF2</code> <code>2E3CDAFF048F360E878E4D906721A1FF</code> <code>F6B6089DD96C5761090814BBD4F92933</code> <code>88ED3AB6C88ED10462F957DB51E70284</code> <code>6E7A5967BFDE86C28D1E3624A92A65E7</code> <code>879CC216F54807DEC6AF6E261DB0CEA9</code> <code>AF6DD654108ADB690ECAB6FE2E4D667F</code> <code>5CFF456A66DD007F62D1BBE7BF3DD18D</code> <code>5CAE1EDF0D48FB51ECA0E7DF23022186</code><br> <code>12B28DB1</code></td>
<td><code>FE00010056E2DCC5219A8FF364A6A7EF</code> <code>E1FF8F57B75CA81CF4AFCB975CE4967F</code> <code>5DC20A88A24EB3D79EBCFD5C955B177B</code> <code>8FEE2A2E15B9F98DB6FB4EC3E1E80996</code> <code>0634E8C7109B41602749C969C1185ABB</code> <code>51964E565E1D054FCDF359E28B76FBBC</code> <code>70C57F56E5BB0FFD412AA46D2C85AD35</code> <code>DAB9A80C85891D123A2E2092D7AD556E</code> <code>40CA2CF53B6D45AA44306FC174D7F8AF</code> <code>DEC6E7B8049C7B1192A7798299731380</code> <code>8CBD57E0FEBF4C8B2946BC807850E8A6</code> <code>01457E4529498F114AAB22BD525F1579</code> <code>16515737795BAB7ADD81F349CBF9F111</code> <code>9A2707396183A095281F9F3B93ADE18C</code> <code>10513196242857EAC8B2EE9431E1DFE2</code> <code>4D56C33F9D8C8C8DB2FA259996C05E21</code><br> <code>70A4DAAA</code></td>
<td>Single-byte prefix denoting length, a 256-byte (2048-bit) string, and zero bytes of padding</td>
</tr>
<tr>
@ -684,47 +684,47 @@ answer = BA0D89B5D0EAB0A3DD8B650520F16A471172C218C09269C72214AEDDE896CA825F21C73
<!-- end client_DH_inner_data -->
<p>The serialization of <em>Client_DH_Inner_Data</em> produces a string <strong>data</strong>. This is used to generate <strong>encrypted_data</strong> as specified in <a href="#7-client-computes-random-2048-bit-number-b-using-a-sufficient-amount-of-entropy-and-sends-the-server-a-message">step 6</a>, using the following inputs:</p>
<!-- start client_DH_inner_data_input -->
<pre><code>data = 54B64366D0EAB0A3DD8B650520F16A471172C218C09269C72214AEDDE896CA825F21C73B0000000000000000FE0001003F605D936EFF386D9C76675E7FB4C11BB7AD14B6DAEF74F08307983308C7D60C9672A47322ECDF49A11D7E898694017245D5FE5558DE4EBDD536D4CEBC7EE0DEF85DAC6CA59701F211ABBB86039432D6F3858F0388E26621631C305A4E674631D28A2C8E31499DE7A1F510E10F80D2CF03DE486699E641640A9CBFF22E3CDAFF048F360E878E4D906721A1FFF6B6089DD96C5761090814BBD4F9293388ED3AB6C88ED10462F957DB51E702846E7A5967BFDE86C28D1E3624A92A65E7879CC216F54807DEC6AF6E261DB0CEA9AF6DD654108ADB690ECAB6FE2E4D667F5CFF456A66DD007F62D1BBE7BF3DD18D5CAE1EDF0D48FB51ECA0E7DF2302218612B28DB1
padding = F5F54C8514CD77126DDC1E4C
tmp_aes_key = 500A86A5C1A48EEC49A928D5A837894717D878F8DFD428AC0E1EAA0EA3BD6B7A
tmp_aes_iv = 8EB36DA465A02A0D27F18BEE711126529DC69B0284C784311B96AD1DB2CA4D77</code></pre>
<pre><code>data = 54B643661BBAD00E11316636C1B9C04B1094499116A16BFD3117CE5063593B17F8B892010000000000000000FE00010056E2DCC5219A8FF364A6A7EFE1FF8F57B75CA81CF4AFCB975CE4967F5DC20A88A24EB3D79EBCFD5C955B177B8FEE2A2E15B9F98DB6FB4EC3E1E809960634E8C7109B41602749C969C1185ABB51964E565E1D054FCDF359E28B76FBBC70C57F56E5BB0FFD412AA46D2C85AD35DAB9A80C85891D123A2E2092D7AD556E40CA2CF53B6D45AA44306FC174D7F8AFDEC6E7B8049C7B1192A77982997313808CBD57E0FEBF4C8B2946BC807850E8A601457E4529498F114AAB22BD525F157916515737795BAB7ADD81F349CBF9F1119A2707396183A095281F9F3B93ADE18C10513196242857EAC8B2EE9431E1DFE24D56C33F9D8C8C8DB2FA259996C05E2170A4DAAA
padding = CD07CAAD48CA829C47822EC0
tmp_aes_key = 4298A03F609E0E3E1493BBFA37FB311E80D1DDEB1E7B88D01BF827B807D1DB5E
tmp_aes_iv = 2D165A15D4C176A7989F0620676F514FE0065D1FB2A918EA80FDDEDF86F35B10</code></pre>
<!-- end client_DH_inner_data_input -->
<p>Process:</p>
<pre><code>data_with_hash := SHA1(data) + data + padding (0-15 random bytes such that total length is divisible by 16)
encrypted_data := AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv);</code></pre>
<p>Output:</p>
<!-- start client_DH_inner_data_output -->
<pre><code>encrypted_data = A1F4A83C8780B80101ABDA0E06C2E2932D1415FE92FC7CF3F25D497874AD7A02ED8829D800EF7EAB113E82D10770011869B10E1F8B9EDF7FF68E4F5E504E04C70C371D413F46B6FC836483040A4425E496437EFBC696D95533EE4F2EFD0C1DCFA47191BA84C5FE9BBB280D2198DE3E88D3273649569624A227AA6071751168B624EAAA3CE806173DD7CF21D1BF3901FEBB1F860F6B58DA71D68A1E8508587398CCE741D01208EA694B50E43C06482953D06A438049D7BCC3D2ED085CB82DCFF4B6989710022C8E8E4F9D85FFF86FDD0EC2C9C1264E886B822FA3B948243AEE937B2EECDF4A3E76A809604A2C1C24C70BD489B357E1588DEEE15BB1432677EFD417635A2CFBAB57BAD640E78FFA6C404B3C7426A77DC9B237808A3A65457C317B98C242B8A801289B68EC67577F883932AA29C170A138A3F9369FFCABFE770874D034BDC98073FB0EAF48520FA8964E67</code></pre>
<pre><code>encrypted_data = 6166DD0AF2A8200A186EAF5149A3A46D9CAAF2E09B510ED5270674B5CB293B5D281201AEF52DAADFAD767E15E46C89319D84F2591C215F0A40C5EB2433069489D3D6FE02EE2D5441CAEFED4799C2E7CA294A31496937CB40326D4DD9F80EE954ED05E33EB6E295B09517740F3EB16808A21F1B0D8C401770C19B6BCB913A4E629130843EBDE3946E15053806D0E187F94404C4465E5038F2DFBCF9E8E12D51E80921560D908DE63BFC0B2F04B3C16F175D774FF3AB4FA067F806C87CE651F1A7A47D12B787D04F353E52B75890762212B7196B33B8E8FE7E6FACAF98D32E6F03095555800DB324D34470827F1012D0375CA69E559E0929D93F6D328B9A0EFBCB955C86B3B69A8631295BF394AFF2637C2BA7C63DAB3E463C4D442583BA17BA0CFE2A21CA21488AD92C83297D1F27973EAFFA1BEED3D2F49DD5A0DDD6ABE331B870236BBAFFB63EC622211377B3805506</code></pre>
<!-- end client_DH_inner_data_output -->
<p>The length of the final string is 336 bytes.</p>
<h6>7.2) set_client_DH_params query</h6>
<!-- start set_client_DH_params -->
<p>Sent payload (excluding transport headers/trailers):</p>
<pre><code>0000 | 00 00 00 00 00 00 00 00 F0 C8 09 00 54 C6 38 67
0010 | 78 01 00 00 1F 5F 04 F5 D0 EA B0 A3 DD 8B 65 05
0020 | 20 F1 6A 47 11 72 C2 18 C0 92 69 C7 22 14 AE DD
0030 | E8 96 CA 82 5F 21 C7 3B FE 50 01 00 A1 F4 A8 3C
0040 | 87 80 B8 01 01 AB DA 0E 06 C2 E2 93 2D 14 15 FE
0050 | 92 FC 7C F3 F2 5D 49 78 74 AD 7A 02 ED 88 29 D8
0060 | 00 EF 7E AB 11 3E 82 D1 07 70 01 18 69 B1 0E 1F
0070 | 8B 9E DF 7F F6 8E 4F 5E 50 4E 04 C7 0C 37 1D 41
0080 | 3F 46 B6 FC 83 64 83 04 0A 44 25 E4 96 43 7E FB
0090 | C6 96 D9 55 33 EE 4F 2E FD 0C 1D CF A4 71 91 BA
00A0 | 84 C5 FE 9B BB 28 0D 21 98 DE 3E 88 D3 27 36 49
00B0 | 56 96 24 A2 27 AA 60 71 75 11 68 B6 24 EA AA 3C
00C0 | E8 06 17 3D D7 CF 21 D1 BF 39 01 FE BB 1F 86 0F
00D0 | 6B 58 DA 71 D6 8A 1E 85 08 58 73 98 CC E7 41 D0
00E0 | 12 08 EA 69 4B 50 E4 3C 06 48 29 53 D0 6A 43 80
00F0 | 49 D7 BC C3 D2 ED 08 5C B8 2D CF F4 B6 98 97 10
0100 | 02 2C 8E 8E 4F 9D 85 FF F8 6F DD 0E C2 C9 C1 26
0110 | 4E 88 6B 82 2F A3 B9 48 24 3A EE 93 7B 2E EC DF
0120 | 4A 3E 76 A8 09 60 4A 2C 1C 24 C7 0B D4 89 B3 57
0130 | E1 58 8D EE E1 5B B1 43 26 77 EF D4 17 63 5A 2C
0140 | FB AB 57 BA D6 40 E7 8F FA 6C 40 4B 3C 74 26 A7
0150 | 7D C9 B2 37 80 8A 3A 65 45 7C 31 7B 98 C2 42 B8
0160 | A8 01 28 9B 68 EC 67 57 7F 88 39 32 AA 29 C1 70
0170 | A1 38 A3 F9 36 9F FC AB FE 77 08 74 D0 34 BD C9
0180 | 80 73 FB 0E AF 48 52 0F A8 96 4E 67</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 7C 24 08 00 92 CB 38 67
0010 | 78 01 00 00 1F 5F 04 F5 1B BA D0 0E 11 31 66 36
0020 | C1 B9 C0 4B 10 94 49 91 16 A1 6B FD 31 17 CE 50
0030 | 63 59 3B 17 F8 B8 92 01 FE 50 01 00 61 66 DD 0A
0040 | F2 A8 20 0A 18 6E AF 51 49 A3 A4 6D 9C AA F2 E0
0050 | 9B 51 0E D5 27 06 74 B5 CB 29 3B 5D 28 12 01 AE
0060 | F5 2D AA DF AD 76 7E 15 E4 6C 89 31 9D 84 F2 59
0070 | 1C 21 5F 0A 40 C5 EB 24 33 06 94 89 D3 D6 FE 02
0080 | EE 2D 54 41 CA EF ED 47 99 C2 E7 CA 29 4A 31 49
0090 | 69 37 CB 40 32 6D 4D D9 F8 0E E9 54 ED 05 E3 3E
00A0 | B6 E2 95 B0 95 17 74 0F 3E B1 68 08 A2 1F 1B 0D
00B0 | 8C 40 17 70 C1 9B 6B CB 91 3A 4E 62 91 30 84 3E
00C0 | BD E3 94 6E 15 05 38 06 D0 E1 87 F9 44 04 C4 46
00D0 | 5E 50 38 F2 DF BC F9 E8 E1 2D 51 E8 09 21 56 0D
00E0 | 90 8D E6 3B FC 0B 2F 04 B3 C1 6F 17 5D 77 4F F3
00F0 | AB 4F A0 67 F8 06 C8 7C E6 51 F1 A7 A4 7D 12 B7
0100 | 87 D0 4F 35 3E 52 B7 58 90 76 22 12 B7 19 6B 33
0110 | B8 E8 FE 7E 6F AC AF 98 D3 2E 6F 03 09 55 55 80
0120 | 0D B3 24 D3 44 70 82 7F 10 12 D0 37 5C A6 9E 55
0130 | 9E 09 29 D9 3F 6D 32 8B 9A 0E FB CB 95 5C 86 B3
0140 | B6 9A 86 31 29 5B F3 94 AF F2 63 7C 2B A7 C6 3D
0150 | AB 3E 46 3C 4D 44 25 83 BA 17 BA 0C FE 2A 21 CA
0160 | 21 48 8A D9 2C 83 29 7D 1F 27 97 3E AF FA 1B EE
0170 | D3 D2 F4 9D D5 A0 DD D6 AB E3 31 B8 70 23 6B BA
0180 | FF B6 3E C6 22 21 13 77 B3 80 55 06</code></pre>
<p>Payload (de)serialization:</p>
<pre><code>set_client_DH_params#f5045f1f nonce:int128 server_nonce:int128 encrypted_data:string = Set_client_DH_params_answer;</code></pre>
<table class="table">
@ -746,7 +746,7 @@ encrypted_data := AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv);<
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>F0C8090054C63867</code></td>
<td><code>7C24080092CB3867</code></td>
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() &lt;&lt; 32) + (N*4)</td>
</tr>
<tr>
@ -764,19 +764,19 @@ encrypted_data := AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv);<
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>D0EAB0A3DD8B650520F16A471172C218</code></td>
<td><code>1BBAD00E11316636C1B9C04B10944991</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>C09269C72214AEDDE896CA825F21C73B</code></td>
<td><code>16A16BFD3117CE5063593B17F8B89201</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>encrypted_data</td>
<td>56, 340</td>
<td><code>FE500100A1F4A83C8780B80101ABDA0E</code> <code>06C2E2932D1415FE92FC7CF3F25D4978</code> <code>74AD7A02ED8829D800EF7EAB113E82D1</code> <code>0770011869B10E1F8B9EDF7FF68E4F5E</code> <code>504E04C70C371D413F46B6FC83648304</code> <code>0A4425E496437EFBC696D95533EE4F2E</code> <code>FD0C1DCFA47191BA84C5FE9BBB280D21</code> <code>98DE3E88D3273649569624A227AA6071</code> <code>751168B624EAAA3CE806173DD7CF21D1</code> <code>BF3901FEBB1F860F6B58DA71D68A1E85</code> <code>08587398CCE741D01208EA694B50E43C</code> <code>06482953D06A438049D7BCC3D2ED085C</code> <code>B82DCFF4B6989710022C8E8E4F9D85FF</code> <code>F86FDD0EC2C9C1264E886B822FA3B948</code> <code>243AEE937B2EECDF4A3E76A809604A2C</code> <code>1C24C70BD489B357E1588DEEE15BB143</code> <code>2677EFD417635A2CFBAB57BAD640E78F</code> <code>FA6C404B3C7426A77DC9B237808A3A65</code> <code>457C317B98C242B8A801289B68EC6757</code> <code>7F883932AA29C170A138A3F9369FFCAB</code> <code>FE770874D034BDC98073FB0EAF48520F</code><br> <code>A8964E67</code></td>
<td><code>FE5001006166DD0AF2A8200A186EAF51</code> <code>49A3A46D9CAAF2E09B510ED5270674B5</code> <code>CB293B5D281201AEF52DAADFAD767E15</code> <code>E46C89319D84F2591C215F0A40C5EB24</code> <code>33069489D3D6FE02EE2D5441CAEFED47</code> <code>99C2E7CA294A31496937CB40326D4DD9</code> <code>F80EE954ED05E33EB6E295B09517740F</code> <code>3EB16808A21F1B0D8C401770C19B6BCB</code> <code>913A4E629130843EBDE3946E15053806</code> <code>D0E187F94404C4465E5038F2DFBCF9E8</code> <code>E12D51E80921560D908DE63BFC0B2F04</code> <code>B3C16F175D774FF3AB4FA067F806C87C</code> <code>E651F1A7A47D12B787D04F353E52B758</code> <code>90762212B7196B33B8E8FE7E6FACAF98</code> <code>D32E6F03095555800DB324D34470827F</code> <code>1012D0375CA69E559E0929D93F6D328B</code> <code>9A0EFBCB955C86B3B69A8631295BF394</code> <code>AFF2637C2BA7C63DAB3E463C4D442583</code> <code>BA17BA0CFE2A21CA21488AD92C83297D</code> <code>1F27973EAFFA1BEED3D2F49DD5A0DDD6</code> <code>ABE331B870236BBAFFB63EC622211377</code><br> <code>B3805506</code></td>
<td>Encrypted client_DH_inner_data generated previously, serialized as a TL byte string</td>
</tr>
</tbody>
@ -785,17 +785,17 @@ encrypted_data := AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv);<
<h5><a class="anchor" href="#8-auth-key-generation" id="8-auth-key-generation" name="8-auth-key-generation"><i class="anchor-icon"></i></a>8) Auth key generation</h5>
<p>The client computes the auth_key using formula <code>g_a^b mod dh_prime</code>:</p>
<!-- start auth_key -->
<pre><code>auth_key = 7FFA424A0AE8CA013E1B7E2262787C0B74E3FE5DAEEEA186CE7C41D0A30A8CFFDA573647EBB3E9D68A8721C9B27827F526E4947A615FAB99942021FF064AF40640F457CCE7ADC563627C18C208B6456236ABF860A1A183C1459912CE3F50E7A7CE66702D579B522434E84201FCD40920E681717ECDADD7ADB99BE04414C55F9D5D1CAC8DC1CEF71FE297FB5CE2088D3B9A2EDEE8CA245305F79C6FEDEB75A69894EB704484BDD16F9ECCF2E13C234AD18EB7B4B1B31CA70B154E89D2DAB2EEDF526AB4581CD5F855E2E00FD6948EA6874C77E765C2F2380FCFFCECDDA456E073CC20CEFDA42B07172F7E1DE433DE0A8D17D5F4BDBDCBC57CDA1892538026F2B0</code></pre>
<pre><code>auth_key = 22AE7F4DB8B3F2C01BB2D80C68E253AF27C4215C6C674DAD288838CE3C259E9ED2B2F0633A58393F79077BF4EC28A2F3ABABF2C124F6B83F1AE49F9CBB2EB0FC7174D05F82C5519FF285D9793DDD75D339F34ED02F8C68B6310969F2B380A2D0AEE2122E110C53653969EC4EA335D827A3CECEC96708AEA4B4C96D206822F81DAED8D88DD757DFF13EA0CBDA47E66FD4CAB6A29CB44FE420FFC68BB59B70FAF38E09E0D4F304EAD283CB68B9EBE6DCCF53FA471D1E4AF3926F67D49930C40BB19337696D78DB5DC627CC55F7C731B4DE31E7C4FAFF7D6B8ABF7BCDE1014C660608BA19B9FC16909C9786197E6EAB10A9983DD7E91DE23FCF2BD91739C04A1289</code></pre>
<!-- end auth_key -->
<h5><a class="anchor" href="#9-final-server-reply" id="9-final-server-reply" name="9-final-server-reply"><i class="anchor-icon"></i></a>9) Final server reply</h5>
<p>The server verifies and confirms that auth_key_hash is unique: since it's unique, it replies with the following:</p>
<!-- start dh_gen_ok -->
<p>Received payload (excluding transport headers/trailers):</p>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 04 44 ED 55 C6 38 67
0010 | 34 00 00 00 34 F7 CB 3B D0 EA B0 A3 DD 8B 65 05
0020 | 20 F1 6A 47 11 72 C2 18 C0 92 69 C7 22 14 AE DD
0030 | E8 96 CA 82 5F 21 C7 3B 3B 1F 8E B5 FD 3E F1 D7
0040 | 3F D8 D5 4B DC 95 12 EA</code></pre>
<pre><code>0000 | 00 00 00 00 00 00 00 00 01 90 D5 01 94 CB 38 67
0010 | 34 00 00 00 34 F7 CB 3B 1B BA D0 0E 11 31 66 36
0020 | C1 B9 C0 4B 10 94 49 91 16 A1 6B FD 31 17 CE 50
0030 | 63 59 3B 17 F8 B8 92 01 0D 20 B4 1A 4A 21 73 5F
0040 | 72 C3 A3 AA BD 4A 92 5C</code></pre>
<p>Payload (de)serialization:</p>
<pre><code>dh_gen_ok#3bcbf734 nonce:int128 server_nonce:int128 new_nonce_hash1:int128 = Set_client_DH_params_answer;</code></pre>
<table class="table">
@ -817,7 +817,7 @@ encrypted_data := AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv);<
<tr>
<td>message_id</td>
<td>8, 8</td>
<td><code>010444ED55C63867</code></td>
<td><code>0190D50194CB3867</code></td>
<td>Message ID generated as specified <a href="/mtproto/description#message-identifier-msg-id">here »</a> (unixtime() &lt;&lt; 32) + (N*4)</td>
</tr>
<tr>
@ -835,19 +835,19 @@ encrypted_data := AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv);<
<tr>
<td>nonce</td>
<td>24, 16</td>
<td><code>D0EAB0A3DD8B650520F16A471172C218</code></td>
<td><code>1BBAD00E11316636C1B9C04B10944991</code></td>
<td>Value generated by client in Step 1</td>
</tr>
<tr>
<td>server_nonce</td>
<td>40, 16</td>
<td><code>C09269C72214AEDDE896CA825F21C73B</code></td>
<td><code>16A16BFD3117CE5063593B17F8B89201</code></td>
<td>Value received from server in Step 2</td>
</tr>
<tr>
<td>new_nonce_hash1</td>
<td>56, 16</td>
<td><code>3B1F8EB5FD3EF1D73FD8D54BDC9512EA</code></td>
<td><code>0D20B41A4A21735F72C3A3AABD4A925C</code></td>
<td>The 128 lower-order bits of SHA1 of the byte string derived from the <code>new_nonce</code> string by adding a single byte with the value of 1, 2, or 3, and followed by another 8 bytes with <code>auth_key_aux_hash</code>. Different values are required to prevent an intruder from changing server response dh_gen_ok into dh_gen_retry.</td>
</tr>
</tbody>

View file

@ -767,7 +767,7 @@
</tr>
<tr>
<td><a href="/constructor/updatePaidReactionPrivacy">updatePaidReactionPrivacy</a></td>
<td> </td>
<td>Contains the current <a href="/api/reactions#paid-reactions">default paid reaction privacy, see here &amp;raquo:</a> for more info.<br><br>Clients should invoke <a href="/method/messages.getPaidReactionPrivacy">messages.getPaidReactionPrivacy</a> on startup to fetch the current default reaction privacy because this update is only sent to currently online sessions and cannot be fetched using getDifference on client startup.</td>
</tr>
</tbody>
</table></div>

View file

@ -645,7 +645,7 @@
</tr>
<tr>
<td><a href="/method/messages.getPaidReactionPrivacy">messages.getPaidReactionPrivacy</a></td>
<td> </td>
<td>Fetches an <a href="/constructor/updatePaidReactionPrivacy">updatePaidReactionPrivacy</a> update with the current <a href="/api/reactions#paid-reactions">default paid reaction privacy, see here &amp;raquo:</a> for more info.</td>
</tr>
</tbody>
</table></div>