From a6f37e932de9edb1af8ea5bbf36d015f676d7265 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 24 Jul 2024 18:15:24 +0000 Subject: [PATCH] Update content of files --- .../web/corefork.telegram.org/api/layers.html | 14 +- .../constructor/globalPrivacySettings.html | 5 +- .../inputPrivacyKeyStatusTimestamp.html | 12 +- .../constructor/user.html | 8 +- .../constructor/userFull.html | 2 +- .../constructor/userStatusLastMonth.html | 2 +- .../constructor/userStatusLastWeek.html | 2 +- .../constructor/userStatusRecently.html | 2 +- .../method/auth.signUp.html | 2 +- .../users.getIsPremiumRequiredToContact.html | 4 +- data/web/corefork.telegram.org/methods.html | 2 +- .../mtproto/samples-auth_key.html | 412 +++++++++--------- .../type/InputPrivacyKey.html | 2 +- .../type/PrivacyKey.html | 2 +- 14 files changed, 245 insertions(+), 226 deletions(-) diff --git a/data/web/corefork.telegram.org/api/layers.html b/data/web/corefork.telegram.org/api/layers.html index f22b49aedc..bd7449b527 100644 --- a/data/web/corefork.telegram.org/api/layers.html +++ b/data/web/corefork.telegram.org/api/layers.html @@ -571,11 +571,23 @@ account.getConnectedBots#4ea4c80f = account.ConnectedBots;
messages.toggleDialogFilterTags#fd2dda49 enabled:Bool = Bool;

Layer 174

+

This layer adds support for:

+

Schema changes

New Methods
diff --git a/data/web/corefork.telegram.org/constructor/globalPrivacySettings.html b/data/web/corefork.telegram.org/constructor/globalPrivacySettings.html index 1b818dfc00..b262af9c59 100644 --- a/data/web/corefork.telegram.org/constructor/globalPrivacySettings.html +++ b/data/web/corefork.telegram.org/constructor/globalPrivacySettings.html @@ -105,7 +105,8 @@

Telegram allows placing chats into folders, based on their type, mute status, or other custom criteria, thanks to folder blacklists and whitelists.

inputPrivacyKeyStatusTimestamp

Whether people will be able to see our exact last online timestamp.

-

Note that if we decide to hide our exact last online timestamp to someone and we do not have a Premium subscription, we won't be able to see the exact last online timestamp of any user, including those that do share it with us.

+

Note that if we decide to hide our exact last online timestamp to someone (i.e., users A, B, C, or all users) and we do not have a Premium subscription, we won't be able to see the exact last online timestamp of those users (A, B, C, or all users), even if those users do share it with us.

+

If those users do share their exact online status with us, but we can't see it due to the reason mentioned above, the by_me flag of userStatusRecently, userStatusLastWeek, userStatusLastMonth will be set.

messages.getOutboxReadDate

Get the exact read date of one of our messages, sent to a private chat with another user.

Can be only done for private outgoing messages not older than appConfig.pm_read_date_expire_period ».

@@ -115,7 +116,7 @@ To set userFull.read_dates_privateuserFull

Extended user info

users.getIsPremiumRequiredToContact

-

Check whether we can write to the specified user (non-Premium users only), see here » for more info on the full flow.

+

Check whether we can write to the specified user (this method can only be called by non-Premium users), see here » for more info on the full flow.

Telegram Premium

Telegram Premium is an optional subscription service that unlocks additional exclusive client-side and API-side features, while helping support the development of the app.

diff --git a/data/web/corefork.telegram.org/constructor/inputPrivacyKeyStatusTimestamp.html b/data/web/corefork.telegram.org/constructor/inputPrivacyKeyStatusTimestamp.html index bd0d3763f8..c019257c1c 100644 --- a/data/web/corefork.telegram.org/constructor/inputPrivacyKeyStatusTimestamp.html +++ b/data/web/corefork.telegram.org/constructor/inputPrivacyKeyStatusTimestamp.html @@ -4,10 +4,10 @@ inputPrivacyKeyStatusTimestamp - + - + @@ -64,7 +64,13 @@

InputPrivacyKey

Related pages

Telegram Premium

-

Telegram Premium is an optional subscription service that unlocks additional exclusive client-side and API-side features, while helping support the development of the app.

+

Telegram Premium is an optional subscription service that unlocks additional exclusive client-side and API-side features, while helping support the development of the app.

+

userStatusRecently

+

Online status: last seen recently

+

userStatusLastWeek

+

Online status: last seen last week

+

userStatusLastMonth

+

Online status: last seen last month

diff --git a/data/web/corefork.telegram.org/constructor/user.html b/data/web/corefork.telegram.org/constructor/user.html index f7f8730bb2..147a4d4f32 100644 --- a/data/web/corefork.telegram.org/constructor/user.html +++ b/data/web/corefork.telegram.org/constructor/user.html @@ -141,7 +141,7 @@ apply_min_photo flags.25?true -If set and min is set, the value of photo can be used to update the local database, see the documentation of that flag for more info. +If set and min is set, the value of photo can be used to update the local database, see the documentation of that flag for more info. fake @@ -156,7 +156,7 @@ premium flags.28?true -Whether this user is a Telegram Premium user
Changes to this flag should invalidate the local userFull cache for this user ID.
Changes to this flag if the self flag is set should also trigger the following calls, to refresh the respective caches:
- help.getConfig
- messages.getTopReactions if the bot flag is not set +Whether this user is a Telegram Premium user
Changes to this flag should invalidate the local userFull cache for this user ID.
Changes to this flag if the self flag is set should also trigger the following calls, to refresh the respective caches:
- help.getConfig
- messages.getTopReactions if the bot flag is not set attach_menu_enabled @@ -206,7 +206,7 @@ access_hash flags.0?long -Access hash of the user, see here » for more info.
If this flag is set, when updating the local peer database, generate a virtual flag called min_access_hash, which is:
- Set to true if min is set AND
- The phone flag is not set OR
- The phone flag is set and the associated phone number string is non-empty
- Set to false otherwise.

Then, apply both access_hash and min_access_hash to the local database if:
- min_access_hash is false OR
- min_access_hash is true AND
- There is no locally cached object for this user OR
- There is no access_hash in the local cache OR
- The cached object's min_access_hash is also true
If the final merged object stored to the database has the min_access_hash field set to true, the related access_hash is only suitable to use in inputPeerPhotoFileLocation », to directly download the profile pictures of users, everywhere else a inputPeer*FromMessage constructor will have to be generated as specified here ».
Bots can also use min access hashes in some conditions, by passing 0 instead of the min access hash. +Access hash of the user, see here » for more info.
If this flag is set, when updating the local peer database, generate a virtual flag called min_access_hash, which is:
- Set to true if min is set AND
- The phone flag is not set OR
- The phone flag is set and the associated phone number string is non-empty
- Set to false otherwise.

Then, apply both access_hash and min_access_hash to the local database if:
- min_access_hash is false OR
- min_access_hash is true AND
- There is no locally cached object for this user OR
- There is no access_hash in the local cache OR
- The cached object's min_access_hash is also true
If the final merged object stored to the database has the min_access_hash field set to true, the related access_hash is only suitable to use in inputPeerPhotoFileLocation », to directly download the profile pictures of users, everywhere else a inputPeer*FromMessage constructor will have to be generated as specified here ».
Bots can also use min access hashes in some conditions, by passing 0 instead of the min access hash. first_name @@ -311,7 +311,7 @@

Unless specified otherwise, when updating the local peer database, all fields from the newly received constructor take priority over the old constructor cached locally (including by removing fields that aren't set in the new constructor).

See here » for an implementation of the logic to use when updating the local user peer database.

users.getIsPremiumRequiredToContact

-

Check whether we can write to the specified user (non-Premium users only), see here » for more info on the full flow.

+

Check whether we can write to the specified user (this method can only be called by non-Premium users), see here » for more info on the full flow.

account.setGlobalPrivacySettings

Set global privacy settings

Business

diff --git a/data/web/corefork.telegram.org/constructor/userFull.html b/data/web/corefork.telegram.org/constructor/userFull.html index f7a4e0141f..103b4338af 100644 --- a/data/web/corefork.telegram.org/constructor/userFull.html +++ b/data/web/corefork.telegram.org/constructor/userFull.html @@ -305,7 +305,7 @@

Unless specified otherwise, when updating the local peer database, all fields from the newly received constructor take priority over the old constructor cached locally (including by removing fields that aren't set in the new constructor).

See here » for an implementation of the logic to use when updating the local user peer database.

users.getIsPremiumRequiredToContact

-

Check whether we can write to the specified user (non-Premium users only), see here » for more info on the full flow.

+

Check whether we can write to the specified user (this method can only be called by non-Premium users), see here » for more info on the full flow.

account.setGlobalPrivacySettings

Set global privacy settings

messages.getOutboxReadDate

diff --git a/data/web/corefork.telegram.org/constructor/userStatusLastMonth.html b/data/web/corefork.telegram.org/constructor/userStatusLastMonth.html index c2c93686bb..132b390f3c 100644 --- a/data/web/corefork.telegram.org/constructor/userStatusLastMonth.html +++ b/data/web/corefork.telegram.org/constructor/userStatusLastMonth.html @@ -86,7 +86,7 @@

privacyKeyStatusTimestamp

Whether we can see the last online timestamp of this user.

Note that if we decide to hide our exact last online timestamp to someone (i.e., users A, B, C, or all users) and we do not have a Premium subscription, we won't be able to see the exact last online timestamp of those users (A, B, C, or all users), even if those users do share it with us.

-

If those users do share their exact online status with us, but we can't see it due to the reason mentioned above, the by_me flag of userStatusRecently, userStatusLastWeek, userStatusLastMonth.

+

If those users do share their exact online status with us, but we can't see it due to the reason mentioned above, the by_me flag of userStatusRecently, userStatusLastWeek, userStatusLastMonth will be set.

diff --git a/data/web/corefork.telegram.org/constructor/userStatusLastWeek.html b/data/web/corefork.telegram.org/constructor/userStatusLastWeek.html index 252dc2dcb2..5e106a1a50 100644 --- a/data/web/corefork.telegram.org/constructor/userStatusLastWeek.html +++ b/data/web/corefork.telegram.org/constructor/userStatusLastWeek.html @@ -86,7 +86,7 @@

privacyKeyStatusTimestamp

Whether we can see the last online timestamp of this user.

Note that if we decide to hide our exact last online timestamp to someone (i.e., users A, B, C, or all users) and we do not have a Premium subscription, we won't be able to see the exact last online timestamp of those users (A, B, C, or all users), even if those users do share it with us.

-

If those users do share their exact online status with us, but we can't see it due to the reason mentioned above, the by_me flag of userStatusRecently, userStatusLastWeek, userStatusLastMonth.

+

If those users do share their exact online status with us, but we can't see it due to the reason mentioned above, the by_me flag of userStatusRecently, userStatusLastWeek, userStatusLastMonth will be set.

diff --git a/data/web/corefork.telegram.org/constructor/userStatusRecently.html b/data/web/corefork.telegram.org/constructor/userStatusRecently.html index 3f95126ed6..8519f00bdd 100644 --- a/data/web/corefork.telegram.org/constructor/userStatusRecently.html +++ b/data/web/corefork.telegram.org/constructor/userStatusRecently.html @@ -86,7 +86,7 @@

privacyKeyStatusTimestamp

Whether we can see the last online timestamp of this user.

Note that if we decide to hide our exact last online timestamp to someone (i.e., users A, B, C, or all users) and we do not have a Premium subscription, we won't be able to see the exact last online timestamp of those users (A, B, C, or all users), even if those users do share it with us.

-

If those users do share their exact online status with us, but we can't see it due to the reason mentioned above, the by_me flag of userStatusRecently, userStatusLastWeek, userStatusLastMonth.

+

If those users do share their exact online status with us, but we can't see it due to the reason mentioned above, the by_me flag of userStatusRecently, userStatusLastWeek, userStatusLastMonth will be set.

diff --git a/data/web/corefork.telegram.org/method/auth.signUp.html b/data/web/corefork.telegram.org/method/auth.signUp.html index dfc5690ca4..774d62e5d6 100644 --- a/data/web/corefork.telegram.org/method/auth.signUp.html +++ b/data/web/corefork.telegram.org/method/auth.signUp.html @@ -77,7 +77,7 @@ no_joined_notifications flags.0?true -  +If set, users on Telegram that have already added phone_number to their contacts will not receive signup notifications about this user. phone_number diff --git a/data/web/corefork.telegram.org/method/users.getIsPremiumRequiredToContact.html b/data/web/corefork.telegram.org/method/users.getIsPremiumRequiredToContact.html index bf66672f51..d2c3a07754 100644 --- a/data/web/corefork.telegram.org/method/users.getIsPremiumRequiredToContact.html +++ b/data/web/corefork.telegram.org/method/users.getIsPremiumRequiredToContact.html @@ -4,10 +4,10 @@ users.getIsPremiumRequiredToContact - + - + diff --git a/data/web/corefork.telegram.org/methods.html b/data/web/corefork.telegram.org/methods.html index b889290008..b81d802d82 100644 --- a/data/web/corefork.telegram.org/methods.html +++ b/data/web/corefork.telegram.org/methods.html @@ -3407,7 +3407,7 @@ Look for updates of telegram's terms of service…"> users.getIsPremiumRequiredToContact -Check whether we can write to the specified user (non-Premium users only), see here » for more info on the full flow. +Check whether we can write to the specified user (this method can only be called by non-Premium users), see here » for more info on the full flow. messages.setDefaultHistoryTTL diff --git a/data/web/corefork.telegram.org/mtproto/samples-auth_key.html b/data/web/corefork.telegram.org/mtproto/samples-auth_key.html index dfeeb01da9..d4b43d8e27 100644 --- a/data/web/corefork.telegram.org/mtproto/samples-auth_key.html +++ b/data/web/corefork.telegram.org/mtproto/samples-auth_key.html @@ -53,9 +53,9 @@
1) Client sends query to server

Sent payload (excluding transport headers/trailers):

-
0000 | 00 00 00 00 00 00 00 00 F8 87 0A 00 B1 3F A1 66
-0010 | 14 00 00 00 F1 8E 7E BE 50 04 22 80 E4 B6 7C 30
-0020 | 77 D4 A0 C1 2D 4D 1E C1
+
0000 | 00 00 00 00 00 00 00 00 58 30 0C 00 7A 43 A1 66
+0010 | 14 00 00 00 F1 8E 7E BE 66 CD 10 76 62 1B 9E 73
+0020 | E9 F5 D2 63 5F 0C 1A 01

Payload (de)serialization:

req_pq_multi#be7e8ef1 nonce:int128 = ResPQ;
@@ -77,7 +77,7 @@ - + @@ -95,7 +95,7 @@ - + @@ -104,11 +104,11 @@
2) Server sends response of the form

Received payload (excluding transport headers/trailers):

-
0000 | 00 00 00 00 00 00 00 00 01 E8 2E 9C B1 3F A1 66
-0010 | C0 00 00 00 63 24 16 05 50 04 22 80 E4 B6 7C 30
-0020 | 77 D4 A0 C1 2D 4D 1E C1 F2 E4 63 9D 99 B8 10 5C
-0030 | A2 0D 76 A0 5F D1 1F 84 08 11 82 5D 68 B2 4C 41
-0040 | EF 00 00 00 15 C4 B5 1C 03 00 00 00 A5 B7 F7 09
+
0000 | 00 00 00 00 00 00 00 00 01 7C 25 D6 7A 43 A1 66
+0010 | A0 00 00 00 63 24 16 05 66 CD 10 76 62 1B 9E 73
+0020 | E9 F5 D2 63 5F 0C 1A 01 26 AF A9 7C 5F D7 7F F1
+0030 | E0 39 D1 40 00 ED 24 1D 08 18 E5 21 66 98 54 81
+0040 | 05 00 00 00 15 C4 B5 1C 03 00 00 00 A5 B7 F7 09
 0050 | 35 5F C3 0B 21 6B E8 6C 02 2B B4 C3 85 FD 64 DE
 0060 | 85 1D 9D D0

Payload (de)serialization:

@@ -132,13 +132,13 @@
- + - + @@ -150,19 +150,19 @@ - + - + - + @@ -208,22 +208,22 @@

Proof of work

3) Client decomposes pq into prime factors such that p < q.
-
pq = 1261673549866484207
-

Decompose into 2 prime cofactors p < q: 1261673549866484207 = 1016741911 * 1240898537

-
p = 1016741911
-q = 1240898537
+
pq = 1793876751103066373
+

Decompose into 2 prime cofactors p < q: 1793876751103066373 = 1128986147 * 1588927159

+
p = 1128986147
+q = 1588927159

Presenting proof of work; Server authentication

4) encrypted_data payload generation

First of all, generate an encrypted_data payload as follows:

Generated payload (excluding transport headers/trailers):

-
0000 | 95 5F F5 A9 08 11 82 5D 68 B2 4C 41 EF 00 00 00
-0010 | 04 3C 9A 40 17 00 00 00 04 49 F6 9B E9 00 00 00
-0020 | 50 04 22 80 E4 B6 7C 30 77 D4 A0 C1 2D 4D 1E C1
-0030 | F2 E4 63 9D 99 B8 10 5C A2 0D 76 A0 5F D1 1F 84
-0040 | 3C 0C 10 14 DB E5 F8 D7 43 34 E9 60 36 75 C3 FA
-0050 | C4 FA A7 96 C2 FC A6 45 F5 C4 C3 9F 90 50 49 7C
+
0000 | 95 5F F5 A9 08 18 E5 21 66 98 54 81 05 00 00 00
+0010 | 04 43 4A F6 23 00 00 00 04 5E B5 1A B7 00 00 00
+0020 | 66 CD 10 76 62 1B 9E 73 E9 F5 D2 63 5F 0C 1A 01
+0030 | 26 AF A9 7C 5F D7 7F F1 E0 39 D1 40 00 ED 24 1D
+0040 | 9A 87 9B 42 20 45 9F 61 DA D0 C6 96 12 A4 7A 3E
+0050 | C0 07 6A B1 6E 06 36 4C 70 0D 14 53 3A 22 C6 6A
 0060 | 02 00 00 00

Payload (de)serialization:

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;
@@ -246,37 +246,37 @@ q = 1240898537
- + - + - + - + - + - + @@ -291,39 +291,39 @@ q = 1240898537

The serialization of P_Q_inner_data produces data, which is used to generate encrypted_data as specified in step 4.1.
These are the inputs to the algorithm specified in step 4.1:

-
data = 955FF5A90811825D68B24C41EF000000043C9A40170000000449F69BE900000050042280E4B67C3077D4A0C12D4D1EC1F2E4639D99B8105CA20D76A05FD11F843C0C1014DBE5F8D74334E9603675C3FAC4FAA796C2FCA645F5C4C39F9050497C02000000
-random_padding_bytes = 164CC8038512BCF8178FDB95E42550E63A4D1215196110827BFF368AE5AF1969C0C250E0649806687C37A0882E2C08610F3EBD5DF39DC3221BA8332A8CA6DFDF1BCB5D7F57F15BD89A5F32148FED59A8439C5E68CEFA44C1D66D8F25
+
data = 955FF5A90818E521669854810500000004434AF623000000045EB51AB700000066CD1076621B9E73E9F5D2635F0C1A0126AFA97C5FD77FF1E039D14000ED241D9A879B4220459F61DAD0C69612A47A3EC0076AB16E06364C700D14533A22C66A02000000
+random_padding_bytes = AC68E271EAEE1982E6AAE68D9D8BF850E7FF60921D8DF734798EA0D2BC3EB101027F4C7534517F48D6BC9E8541DF75F449C4758B88D72AB64B48F6A6B55F7613EBD18D7CD98CD53E42BEAE3425F3B57CB23B7DEA4910D5208F68C828

And this is the output:

-
encrypted_data = B519E958BFD522D00D490335CAB2FEED9DE6F74BA8DB9887FCF54AEDFD3C5B4B383CE5E77EE0F033A22683DEA57D0BE279D680020499B10EDEE578B0DBB9C47C4B73F5EE3C60D36A16464371BA4D4AF2C86BE4CDBB6C940A0F2FF07FAEE5DC0AF7B478C34013DF745301221FFBA0A0D473D9CC8B2AD9A084366D31023E02D888F76C4772E118A0CE37FA7E0AB0704ED2F3DB67A691BA99AD41CC74D89AB6371DEBD3E1B98FAB0A951B90AD117B28081654DB8357F25C96EBEA9074561EE16D3B1AF516F8751C33D7839684D14B1CBA3004A98F3AB0D48DEA49ACF7D8E84A2849CB211BC1786371900FCC5AE0BD0177D7808B67FAFEF3B28E535CDE542E1C353A
+
encrypted_data = 653653CFB0757F413BB587CB19DAD439720270A1044E977861E5374030341977C54B1B479E995270816782C710D5DC842C9A60E9ECDC2B99E4214BAC4B2B248F29D32EB224981BFF4AF9864FB0CF9225F50B036DC714AD7C26385CA97B75ED09253A02AF66F3083E2B0B604FBC1CA175120037B92A891E2495DBD1CA086C4F283CE45760E24DAA9CA554204C68E2E6A7809DE6021AF626A8448F89CADB171D51B7E710EA78C6E8475F5445EB3CC15560AF846F9B19D39C7830621A04D14726E9893CB6795E96F6003A39B5E2521D58E50177BEDBCEBC5F545A71CE571043A60E17AEC6034ECE5DBF2DE0755242DA7807943BCC6987625C2A46F5F397502384ED

The length of the final string is 256 bytes.

5) Send req_DH_params query with generated encrypted_data

Sent payload (excluding transport headers/trailers):

-
0000 | 00 00 00 00 00 00 00 00 FC 87 0A 00 B1 3F A1 66
-0010 | 40 01 00 00 BE E4 12 D7 50 04 22 80 E4 B6 7C 30
-0020 | 77 D4 A0 C1 2D 4D 1E C1 F2 E4 63 9D 99 B8 10 5C
-0030 | A2 0D 76 A0 5F D1 1F 84 04 3C 9A 40 17 00 00 00
-0040 | 04 49 F6 9B E9 00 00 00 85 FD 64 DE 85 1D 9D D0
-0050 | FE 00 01 00 B5 19 E9 58 BF D5 22 D0 0D 49 03 35
-0060 | CA B2 FE ED 9D E6 F7 4B A8 DB 98 87 FC F5 4A ED
-0070 | FD 3C 5B 4B 38 3C E5 E7 7E E0 F0 33 A2 26 83 DE
-0080 | A5 7D 0B E2 79 D6 80 02 04 99 B1 0E DE E5 78 B0
-0090 | DB B9 C4 7C 4B 73 F5 EE 3C 60 D3 6A 16 46 43 71
-00A0 | BA 4D 4A F2 C8 6B E4 CD BB 6C 94 0A 0F 2F F0 7F
-00B0 | AE E5 DC 0A F7 B4 78 C3 40 13 DF 74 53 01 22 1F
-00C0 | FB A0 A0 D4 73 D9 CC 8B 2A D9 A0 84 36 6D 31 02
-00D0 | 3E 02 D8 88 F7 6C 47 72 E1 18 A0 CE 37 FA 7E 0A
-00E0 | B0 70 4E D2 F3 DB 67 A6 91 BA 99 AD 41 CC 74 D8
-00F0 | 9A B6 37 1D EB D3 E1 B9 8F AB 0A 95 1B 90 AD 11
-0100 | 7B 28 08 16 54 DB 83 57 F2 5C 96 EB EA 90 74 56
-0110 | 1E E1 6D 3B 1A F5 16 F8 75 1C 33 D7 83 96 84 D1
-0120 | 4B 1C BA 30 04 A9 8F 3A B0 D4 8D EA 49 AC F7 D8
-0130 | E8 4A 28 49 CB 21 1B C1 78 63 71 90 0F CC 5A E0
-0140 | BD 01 77 D7 80 8B 67 FA FE F3 B2 8E 53 5C DE 54
-0150 | 2E 1C 35 3A
+
0000 | 00 00 00 00 00 00 00 00 40 3B 0F 00 7A 43 A1 66
+0010 | 40 01 00 00 BE E4 12 D7 66 CD 10 76 62 1B 9E 73
+0020 | E9 F5 D2 63 5F 0C 1A 01 26 AF A9 7C 5F D7 7F F1
+0030 | E0 39 D1 40 00 ED 24 1D 04 43 4A F6 23 00 00 00
+0040 | 04 5E B5 1A B7 00 00 00 85 FD 64 DE 85 1D 9D D0
+0050 | FE 00 01 00 65 36 53 CF B0 75 7F 41 3B B5 87 CB
+0060 | 19 DA D4 39 72 02 70 A1 04 4E 97 78 61 E5 37 40
+0070 | 30 34 19 77 C5 4B 1B 47 9E 99 52 70 81 67 82 C7
+0080 | 10 D5 DC 84 2C 9A 60 E9 EC DC 2B 99 E4 21 4B AC
+0090 | 4B 2B 24 8F 29 D3 2E B2 24 98 1B FF 4A F9 86 4F
+00A0 | B0 CF 92 25 F5 0B 03 6D C7 14 AD 7C 26 38 5C A9
+00B0 | 7B 75 ED 09 25 3A 02 AF 66 F3 08 3E 2B 0B 60 4F
+00C0 | BC 1C A1 75 12 00 37 B9 2A 89 1E 24 95 DB D1 CA
+00D0 | 08 6C 4F 28 3C E4 57 60 E2 4D AA 9C A5 54 20 4C
+00E0 | 68 E2 E6 A7 80 9D E6 02 1A F6 26 A8 44 8F 89 CA
+00F0 | DB 17 1D 51 B7 E7 10 EA 78 C6 E8 47 5F 54 45 EB
+0100 | 3C C1 55 60 AF 84 6F 9B 19 D3 9C 78 30 62 1A 04
+0110 | D1 47 26 E9 89 3C B6 79 5E 96 F6 00 3A 39 B5 E2
+0120 | 52 1D 58 E5 01 77 BE DB CE BC 5F 54 5A 71 CE 57
+0130 | 10 43 A6 0E 17 AE C6 03 4E CE 5D BF 2D E0 75 52
+0140 | 42 DA 78 07 94 3B CC 69 87 62 5C 2A 46 F5 F3 97
+0150 | 50 23 84 ED

Payload (de)serialization:

req_DH_params#d712e4be nonce:int128 server_nonce:int128 p:string q:string public_key_fingerprint:long encrypted_data:string = Server_DH_Params;
message_id 8, 8F8870A00B13FA16658300C007A43A166 Message ID generated as specified here » (unixtime() << 32) + (N*4)
nonce 24, 1650042280E4B67C3077D4A0C12D4D1EC166CD1076621B9E73E9F5D2635F0C1A01 Random number
message_id 8, 801E82E9CB13FA166017C25D67A43A166 Message ID generated as specified here » (unixtime() << 32) + (N*4)
message_length 16, 4C0000000 (192 in decimal)A0000000 (160 in decimal) Message body length
nonce 24, 1650042280E4B67C3077D4A0C12D4D1EC166CD1076621B9E73E9F5D2635F0C1A01 Value generated by client in Step 1
server_nonce 40, 16F2E4639D99B8105CA20D76A05FD11F8426AFA97C5FD77FF1E039D14000ED241D Server-generated random number
pq 56, 120811825D68B24C41EF000000
TL byte deserialization
=> bigendian conversion to decimal
=> 1261673549866484207
0818E5216698548105000000
TL byte deserialization
=> bigendian conversion to decimal
=> 1793876751103066373
Single-byte prefix denoting length, an 8-byte string, and three bytes of padding
pq 4, 120811825D68B24C41EF000000
TL byte deserialization
=> bigendian conversion to decimal
=> 1261673549866484207
0818E5216698548105000000
TL byte deserialization
=> bigendian conversion to decimal
=> 1793876751103066373
Single-byte prefix denoting length, 8-byte string, and three bytes of padding
p 16, 8043C9A4017000000
TL byte deserialization
=> bigendian conversion to decimal
=> 1016741911
04434AF623000000
TL byte deserialization
=> bigendian conversion to decimal
=> 1128986147
First prime cofactor: single-byte prefix denoting length, 4-byte string, and three bytes of padding
q 24, 80449F69BE9000000
TL byte deserialization
=> bigendian conversion to decimal
=> 1240898537
045EB51AB7000000
TL byte deserialization
=> bigendian conversion to decimal
=> 1588927159
Second prime cofactor: single-byte prefix denoting length, 4-byte string, and three bytes of padding
nonce 32, 1650042280E4B67C3077D4A0C12D4D1EC166CD1076621B9E73E9F5D2635F0C1A01 Value generated by client in Step 1
server_nonce 48, 16F2E4639D99B8105CA20D76A05FD11F8426AFA97C5FD77FF1E039D14000ED241D Value received from server in Step 2
new_nonce 64, 323C0C1014DBE5F8D74334E9603675C3FA C4FAA796C2FCA645F5C4C39F9050497C9A879B4220459F61DAD0C69612A47A3E C0076AB16E06364C700D14533A22C66A Client-generated random number
@@ -345,7 +345,7 @@ random_padding_bytes = 164CC8038512BCF8178FDB95E42550E63A4D1215196110827BFF368AE - + @@ -363,25 +363,25 @@ random_padding_bytes = 164CC8038512BCF8178FDB95E42550E63A4D1215196110827BFF368AE - + - + - + - + @@ -393,7 +393,7 @@ random_padding_bytes = 164CC8038512BCF8178FDB95E42550E63A4D1215196110827BFF368AE - + @@ -402,47 +402,47 @@ random_padding_bytes = 164CC8038512BCF8178FDB95E42550E63A4D1215196110827BFF368AE
6) Server responds with:

Received payload (excluding transport headers/trailers):

-
0000 | 00 00 00 00 00 00 00 00 01 58 8F 4D B2 3F A1 66
-0010 | A0 02 00 00 5C 07 E8 D0 50 04 22 80 E4 B6 7C 30
-0020 | 77 D4 A0 C1 2D 4D 1E C1 F2 E4 63 9D 99 B8 10 5C
-0030 | A2 0D 76 A0 5F D1 1F 84 FE 50 02 00 10 5A A2 CB
-0040 | D8 5D D3 3A 5D 1E F8 60 2F 11 A1 5F 25 40 61 F8
-0050 | 9C E5 38 CB A2 74 A1 85 FE 0A 08 76 93 CC 62 B8
-0060 | 00 CF A1 64 5F 9F 28 96 4F E7 97 66 B1 CF F0 48
-0070 | BF 9E 38 ED 32 39 D0 D4 0D 09 54 FE C4 67 99 E4
-0080 | 51 E2 65 AD 2D 8F 5C 09 1D 26 22 99 77 F8 3A D7
-0090 | FA 9F D8 62 45 D2 F5 78 6A D0 C0 FB 79 AA 32 5A
-00A0 | 95 91 7C 88 5B 87 DB 1F 27 3F 88 EE 9B 7D B1 8F
-00B0 | 69 26 3B C7 10 C2 9C 3C 69 29 4C 85 BC 5A 3F 67
-00C0 | 2F A9 66 AA 43 C9 0A A4 5E F5 96 13 9D 9D 61 C9
-00D0 | 65 C5 57 BB 25 D3 EA 2E D7 3B AC A4 59 EF FE EF
-00E0 | A8 AB 28 14 F5 6E 84 1B 31 E4 0D BD B9 77 58 FD
-00F0 | DD 66 98 A6 86 C9 19 C2 07 C5 D6 7B 6E 35 0F 79
-0100 | 28 02 4D 61 4C 63 BB 8B A9 9F 74 C4 D9 67 43 03
-0110 | FB 37 EC D0 CE 54 02 49 97 84 ED C0 4B 21 5E F6
-0120 | 7B 1B 55 15 C2 E6 71 D2 60 C4 83 03 C9 DB 49 8C
-0130 | 64 44 AA E1 81 11 1C 84 9C 3E 90 8D 4F 56 18 FC
-0140 | B5 09 26 FC 3F BD 4A 67 56 EF EF 9A 1E 9C 98 08
-0150 | 65 2A E0 14 66 FF F6 E3 E9 DB 55 5F FA C9 11 06
-0160 | F1 71 E0 5D 35 8A 76 27 74 AC A5 13 F5 78 03 6F
-0170 | D8 07 8D CC CB 43 90 18 F6 D8 CE 7C 79 38 EA C5
-0180 | A4 5E FC E2 40 9A 44 FD 04 25 47 D3 FD 16 E8 46
-0190 | 66 19 09 A3 77 B1 CD 42 54 BF E5 1B 19 39 A4 FF
-01A0 | 52 97 C5 A9 FF 7B 8F 4E D6 11 2D AD 5D 4C 3D 88
-01B0 | E2 E1 28 D5 82 48 02 DC 75 51 4B 36 59 87 0B D5
-01C0 | 6B 1C D4 70 F8 46 CE EA 6D 2A 23 AC 69 67 41 F1
-01D0 | 61 42 A1 3F 49 0D 47 AE 29 06 EF AA 07 35 F9 91
-01E0 | D6 9F B8 8D 7A D4 CF A5 40 A1 AA FA 5C 7F 6E CB
-01F0 | CE FB BD 9C DA BF C0 D7 89 E3 CC A6 DE 30 42 EC
-0200 | DF 52 42 33 21 8C 41 9A 8A 3C 18 7F 25 51 A4 80
-0210 | D2 7D B9 C8 76 F6 72 EF 39 D2 BC 8F 8B 95 B7 0A
-0220 | 84 F7 5D 24 C5 4D 62 55 A2 F8 75 1A 38 FC C6 4E
-0230 | EA 08 96 DE 76 CE C5 8D 89 9E FA 8B 20 AF 3C FC
-0240 | 57 9C 36 14 D5 A9 5E 2C 6E B9 A2 04 86 11 1A 80
-0250 | B2 47 12 D3 CC 50 D3 E1 67 A5 C7 08 9A 63 EE 6F
-0260 | AF 1C 60 DF 63 57 F8 81 C4 E2 AF DC 58 C6 91 C7
-0270 | 08 3D 76 39 DC CE 5E 1D FF F0 B4 1E F5 77 BC B8
-0280 | 4C C1 80 3D 71 24 D3 98 CD 5B 6F 97
+
0000 | 00 00 00 00 00 00 00 00 01 E0 8B A3 7B 43 A1 66
+0010 | A4 02 00 00 5C 07 E8 D0 66 CD 10 76 62 1B 9E 73
+0020 | E9 F5 D2 63 5F 0C 1A 01 26 AF A9 7C 5F D7 7F F1
+0030 | E0 39 D1 40 00 ED 24 1D FE 50 02 00 18 B9 1A 33
+0040 | DE F8 5A FB 14 DF CA 63 35 97 CD BA B2 C2 34 4D
+0050 | 8A F8 F5 44 20 5E 48 63 F1 D3 40 77 F9 77 1C 75
+0060 | 8D 22 7D BA A3 BB 9F 3C FE F7 2F 5C 79 CC 3C D0
+0070 | 59 28 8F CC 65 16 46 19 3E 13 BD CA 93 A2 23 E5
+0080 | 04 0B C3 0F 3F 90 2A 11 12 90 65 B4 8A 65 0E FB
+0090 | F6 76 CF 71 38 C2 1C 33 5F 40 EC AE BA E9 CD A4
+00A0 | 3D 39 D4 A3 58 55 99 92 3B 15 FC FA C8 97 A2 8D
+00B0 | B5 0B 54 7D 9A B2 D9 B7 B0 40 5B 65 93 03 6D 12
+00C0 | FA 41 50 0F 3A 03 F7 E9 C6 24 B0 6B C1 A4 D9 16
+00D0 | 94 1C 39 0F 63 D5 F5 18 09 43 D3 F8 0C 3F E5 30
+00E0 | 07 96 55 E2 3C 4C 1E B2 2A 9F FE A3 72 E6 6A 41
+00F0 | 7D 60 4F D6 D0 5F 34 35 88 C2 BC 8F 92 7A 84 44
+0100 | 7B EF CA 8B C9 0B E1 2C D2 37 37 6D 16 73 17 12
+0110 | 6A D2 5E 7C 2A 80 83 70 CF 9D 63 88 CC CE 13 CC
+0120 | 49 F8 EA E4 A3 6C 97 44 F3 11 CB 79 60 05 04 E1
+0130 | A0 5B F2 16 71 A1 BA AA 52 D3 8F 38 3E F5 6C BD
+0140 | 6B A4 D5 E9 14 A9 35 50 FF 74 CC E1 DA 5E CD 5C
+0150 | 77 ED AF 39 F5 AC BE 7E 8D BE 21 DF FB 1A 99 80
+0160 | 99 D4 13 47 09 5E E9 B7 5D 2E 63 E7 45 D1 1B 00
+0170 | 4B DF 79 46 FA 8C A7 AF 0F 08 BA 2D 8A 41 BA 9B
+0180 | 8F B2 7B 25 DD 5F 5E 28 CF B7 C0 90 58 D4 C4 ED
+0190 | DF F7 FB E8 33 EC FB 98 C3 BC 36 C3 EC E4 52 15
+01A0 | 95 F2 24 6F DB 05 D9 C3 03 2A 24 A9 85 A7 89 5F
+01B0 | 3A 84 B4 A7 7C 6D 6E 19 5A 58 94 46 79 69 44 E6
+01C0 | B5 4E B0 87 55 CD 4F 03 C5 07 A1 F8 86 54 51 C4
+01D0 | 4B F3 DB 53 DA 1F 95 DD 8F 0D 16 42 41 C0 84 43
+01E0 | 8F AC F5 DD 5C E9 1E 1F BA B4 AE 23 DF 58 88 EA
+01F0 | 49 70 5D 85 88 7F 37 40 D2 FD 13 87 AD D0 F1 D0
+0200 | B5 97 69 E7 A1 24 72 13 7A 65 99 BB 08 02 5B 37
+0210 | 96 69 5E 34 3F 39 33 BF AF 19 DA 9B 9D 13 52 E8
+0220 | A5 ED 5D 01 3B 11 84 86 AC F9 76 B8 AA E8 65 36
+0230 | 2C 20 9C B4 92 A9 34 7E 09 B3 01 36 9D E8 C5 6D
+0240 | E5 06 1E DE D3 7C B5 E3 1D FA 98 DB 4A 27 73 FB
+0250 | 07 36 A1 87 ED 5F 46 92 2D 37 44 6F 1C 6E 26 DD
+0260 | 64 CC 1C D1 A3 8C 07 D9 9A CA FB F7 C6 09 91 03
+0270 | BA A4 93 2C C1 A2 8F D0 C3 5B 2D 6C FB 9D 73 F9
+0280 | F3 FD 90 06 DD DA B1 3D 23 08 5D 80

Payload (de)serialization:

server_DH_params_ok#d0e8075c nonce:int128 server_nonce:int128 encrypted_answer:string = Server_DH_Params;
message_id 8, 8FC870A00B13FA166403B0F007A43A166 Message ID generated as specified here » (unixtime() << 32) + (N*4)
nonce 24, 1650042280E4B67C3077D4A0C12D4D1EC166CD1076621B9E73E9F5D2635F0C1A01 Value generated by client in Step 1
server_nonce 40, 16F2E4639D99B8105CA20D76A05FD11F8426AFA97C5FD77FF1E039D14000ED241D Value received from server in Step 2
p 56, 8043C9A4017000000
TL byte deserialization
=> bigendian conversion to decimal
=> 1016741911
04434AF623000000
TL byte deserialization
=> bigendian conversion to decimal
=> 1128986147
First prime cofactor: single-byte prefix denoting length, 4-byte string, and three bytes of padding
q 64, 80449F69BE9000000
TL byte deserialization
=> bigendian conversion to decimal
=> 1240898537
045EB51AB7000000
TL byte deserialization
=> bigendian conversion to decimal
=> 1588927159
Second prime cofactor: single-byte prefix denoting length, 4-byte string, and three bytes of padding
encrypted_data 80, 260FE000100B519E958BFD522D00D490335 CAB2FEED9DE6F74BA8DB9887FCF54AED FD3C5B4B383CE5E77EE0F033A22683DE A57D0BE279D680020499B10EDEE578B0 DBB9C47C4B73F5EE3C60D36A16464371 BA4D4AF2C86BE4CDBB6C940A0F2FF07F AEE5DC0AF7B478C34013DF745301221F FBA0A0D473D9CC8B2AD9A084366D3102 3E02D888F76C4772E118A0CE37FA7E0A B0704ED2F3DB67A691BA99AD41CC74D8 9AB6371DEBD3E1B98FAB0A951B90AD11 7B28081654DB8357F25C96EBEA907456 1EE16D3B1AF516F8751C33D7839684D1 4B1CBA3004A98F3AB0D48DEA49ACF7D8 E84A2849CB211BC1786371900FCC5AE0 BD0177D7808B67FAFEF3B28E535CDE54
2E1C353A
FE000100653653CFB0757F413BB587CB 19DAD439720270A1044E977861E53740 30341977C54B1B479E995270816782C7 10D5DC842C9A60E9ECDC2B99E4214BAC 4B2B248F29D32EB224981BFF4AF9864F B0CF9225F50B036DC714AD7C26385CA9 7B75ED09253A02AF66F3083E2B0B604F BC1CA175120037B92A891E2495DBD1CA 086C4F283CE45760E24DAA9CA554204C 68E2E6A7809DE6021AF626A8448F89CA DB171D51B7E710EA78C6E8475F5445EB 3CC15560AF846F9B19D39C7830621A04 D14726E9893CB6795E96F6003A39B5E2 521D58E50177BEDBCEBC5F545A71CE57 1043A60E17AEC6034ECE5DBF2DE07552 42DA7807943BCC6987625C2A46F5F397
502384ED
Value generated above
@@ -464,13 +464,13 @@ random_padding_bytes = 164CC8038512BCF8178FDB95E42550E63A4D1215196110827BFF368AE - + - + @@ -482,19 +482,19 @@ random_padding_bytes = 164CC8038512BCF8178FDB95E42550E63A4D1215196110827BFF368AE - + - + - + @@ -502,20 +502,20 @@ random_padding_bytes = 164CC8038512BCF8178FDB95E42550E63A4D1215196110827BFF368AE

Decrypt encrypted_answer using the reverse of the process specified in step 6:

-
encrypted_answer = 105AA2CBD85DD33A5D1EF8602F11A15F254061F89CE538CBA274A185FE0A087693CC62B800CFA1645F9F28964FE79766B1CFF048BF9E38ED3239D0D40D0954FEC46799E451E265AD2D8F5C091D26229977F83AD7FA9FD86245D2F5786AD0C0FB79AA325A95917C885B87DB1F273F88EE9B7DB18F69263BC710C29C3C69294C85BC5A3F672FA966AA43C90AA45EF596139D9D61C965C557BB25D3EA2ED73BACA459EFFEEFA8AB2814F56E841B31E40DBDB97758FDDD6698A686C919C207C5D67B6E350F7928024D614C63BB8BA99F74C4D9674303FB37ECD0CE5402499784EDC04B215EF67B1B5515C2E671D260C48303C9DB498C6444AAE181111C849C3E908D4F5618FCB50926FC3FBD4A6756EFEF9A1E9C9808652AE01466FFF6E3E9DB555FFAC91106F171E05D358A762774ACA513F578036FD8078DCCCB439018F6D8CE7C7938EAC5A45EFCE2409A44FD042547D3FD16E846661909A377B1CD4254BFE51B1939A4FF5297C5A9FF7B8F4ED6112DAD5D4C3D88E2E128D5824802DC75514B3659870BD56B1CD470F846CEEA6D2A23AC696741F16142A13F490D47AE2906EFAA0735F991D69FB88D7AD4CFA540A1AAFA5C7F6ECBCEFBBD9CDABFC0D789E3CCA6DE3042ECDF524233218C419A8A3C187F2551A480D27DB9C876F672EF39D2BC8F8B95B70A84F75D24C54D6255A2F8751A38FCC64EEA0896DE76CEC58D899EFA8B20AF3CFC579C3614D5A95E2C6EB9A20486111A80B24712D3CC50D3E167A5C7089A63EE6FAF1C60DF6357F881C4E2AFDC58C691C7083D7639DCCE5E1DFFF0B41EF577BCB84CC1803D7124D398CD5B6F97
-tmp_aes_key = 0862009CDA343B604C16E1FB67162F4A6E0328779435AE8B32B844D8B8AE1B27
-tmp_aes_iv = D322BF7B0FE3405722AE697F94816E143A5EB539D3129610D71EA71C3C0C1014
+
encrypted_answer = 18B91A33DEF85AFB14DFCA633597CDBAB2C2344D8AF8F544205E4863F1D34077F9771C758D227DBAA3BB9F3CFEF72F5C79CC3CD059288FCC651646193E13BDCA93A223E5040BC30F3F902A11129065B48A650EFBF676CF7138C21C335F40ECAEBAE9CDA43D39D4A3585599923B15FCFAC897A28DB50B547D9AB2D9B7B0405B6593036D12FA41500F3A03F7E9C624B06BC1A4D916941C390F63D5F5180943D3F80C3FE530079655E23C4C1EB22A9FFEA372E66A417D604FD6D05F343588C2BC8F927A84447BEFCA8BC90BE12CD237376D167317126AD25E7C2A808370CF9D6388CCCE13CC49F8EAE4A36C9744F311CB79600504E1A05BF21671A1BAAA52D38F383EF56CBD6BA4D5E914A93550FF74CCE1DA5ECD5C77EDAF39F5ACBE7E8DBE21DFFB1A998099D41347095EE9B75D2E63E745D11B004BDF7946FA8CA7AF0F08BA2D8A41BA9B8FB27B25DD5F5E28CFB7C09058D4C4EDDFF7FBE833ECFB98C3BC36C3ECE4521595F2246FDB05D9C3032A24A985A7895F3A84B4A77C6D6E195A589446796944E6B54EB08755CD4F03C507A1F8865451C44BF3DB53DA1F95DD8F0D164241C084438FACF5DD5CE91E1FBAB4AE23DF5888EA49705D85887F3740D2FD1387ADD0F1D0B59769E7A12472137A6599BB08025B3796695E343F3933BFAF19DA9B9D1352E8A5ED5D013B118486ACF976B8AAE865362C209CB492A9347E09B301369DE8C56DE5061EDED37CB5E31DFA98DB4A2773FB0736A187ED5F46922D37446F1C6E26DD64CC1CD1A38C07D99ACAFBF7C6099103BAA4932CC1A28FD0C35B2D6CFB9D73F9F3FD9006DDDAB13D23085D80
+tmp_aes_key = 9C9BB7C3AA015DBE62FE5577D0C089EF7C0A6EE4350CAC3BEE267C92AF846BBF
+tmp_aes_iv = E8F23793463529F1EBDB9B64830F0D3FDD9F5AD447CBBFF257E7385F9A879B42

Yielding:

-
answer_with_hash = 15989B2F251AB8C10E1E412DAFCA6D7A6E352BCABA0D89B550042280E4B67C3077D4A0C12D4D1EC1F2E4639D99B8105CA20D76A05FD11F8403000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100AF72F3963FDBA1665B55447FD1D6E0085A7B44999E834CE16D600DA97DD44E70D4AFE2C8BDD51B7B1CD921D566A9D89CAE5CA7BF4C88DA694EAEC3ECA1A938FE626D3A1D2ED84D9404ABC37ED8629A638F8591F441A21F4BE3388FDE34B271C9692F2EBD1F3BAB1A6CE391A0401D3F0417FFF96609178D4CF3D3CE1564264DD6266719A559BB5E40A6B69955BBBE32F0CFB7BDAA0B3A52CD1A6A72B87C9EE66495C1ACCCA3BDA8299229D0045D59F9795BD3B38FC7A54EE590200E95EE7C739EA80ADEE55649226009BC14D36797613DC4220B126631A41371739FD63F3FAE3E5219B9164E45EA8BFEBF57B239655B1745D73065C05E7A3DD69F0331AFF4B59EB23FA1663946F5D0F640DDA7
-answer = BA0D89B550042280E4B67C3077D4A0C12D4D1EC1F2E4639D99B8105CA20D76A05FD11F8403000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100AF72F3963FDBA1665B55447FD1D6E0085A7B44999E834CE16D600DA97DD44E70D4AFE2C8BDD51B7B1CD921D566A9D89CAE5CA7BF4C88DA694EAEC3ECA1A938FE626D3A1D2ED84D9404ABC37ED8629A638F8591F441A21F4BE3388FDE34B271C9692F2EBD1F3BAB1A6CE391A0401D3F0417FFF96609178D4CF3D3CE1564264DD6266719A559BB5E40A6B69955BBBE32F0CFB7BDAA0B3A52CD1A6A72B87C9EE66495C1ACCCA3BDA8299229D0045D59F9795BD3B38FC7A54EE590200E95EE7C739EA80ADEE55649226009BC14D36797613DC4220B126631A41371739FD63F3FAE3E5219B9164E45EA8BFEBF57B239655B1745D73065C05E7A3DD69F0331AFF4B59EB23FA1663946F5D0F640DDA7
+
answer_with_hash = 410295692DFDDE1C218D38A7F377C196FCBF538BBA0D89B566CD1076621B9E73E9F5D2635F0C1A0126AFA97C5FD77FF1E039D14000ED241D03000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100BBCC9D18A34899FB13B987A3CDCD838DCE934554B98753F095E890A9B2934D144F8E07531A5522636C85B594D1576A0C56C1C29C99421294238FE8006B59EC9EF5BE48DE208B3134FED5415256A61DB92FF630B341DFFB475CC3BAFA8C8578BDD5CD41C7EC15D05436BC6E30BBD00A76FC79CD743966153C8D0DC39083E4DF249B30F7E98261112410DFBC70C9699C1CD4233650D57BB91EE1BD381294807DCA26DEE3EBF37ADD9E361E4DCA6CA35F539605116EF1D7412933E45651A1C2E9EF67BC393FB9E71036429D7B66528543DD657C300436C968DE7A033A1E550E22E825A3F7481AF4BBB7DADAF640EF265788813546C7F9898F2E8CDD45A6889FD1637B43A16627A4C8D9D2F1C26B
+answer = BA0D89B566CD1076621B9E73E9F5D2635F0C1A0126AFA97C5FD77FF1E039D14000ED241D03000000FE000100C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5BFE000100BBCC9D18A34899FB13B987A3CDCD838DCE934554B98753F095E890A9B2934D144F8E07531A5522636C85B594D1576A0C56C1C29C99421294238FE8006B59EC9EF5BE48DE208B3134FED5415256A61DB92FF630B341DFFB475CC3BAFA8C8578BDD5CD41C7EC15D05436BC6E30BBD00A76FC79CD743966153C8D0DC39083E4DF249B30F7E98261112410DFBC70C9699C1CD4233650D57BB91EE1BD381294807DCA26DEE3EBF37ADD9E361E4DCA6CA35F539605116EF1D7412933E45651A1C2E9EF67BC393FB9E71036429D7B66528543DD657C300436C968DE7A033A1E550E22E825A3F7481AF4BBB7DADAF640EF265788813546C7F9898F2E8CDD45A6889FD1637B43A16627A4C8D9D2F1C26B

Generated payload (excluding transport headers/trailers):

-
0000 | BA 0D 89 B5 50 04 22 80 E4 B6 7C 30 77 D4 A0 C1
-0010 | 2D 4D 1E C1 F2 E4 63 9D 99 B8 10 5C A2 0D 76 A0
-0020 | 5F D1 1F 84 03 00 00 00 FE 00 01 00 C7 1C AE B9
+
0000 | BA 0D 89 B5 66 CD 10 76 62 1B 9E 73 E9 F5 D2 63
+0010 | 5F 0C 1A 01 26 AF A9 7C 5F D7 7F F1 E0 39 D1 40
+0020 | 00 ED 24 1D 03 00 00 00 FE 00 01 00 C7 1C AE B9
 0030 | C6 B1 C9 04 8E 6C 52 2F 70 F1 3F 73 98 0D 40 23
 0040 | 8E 3E 21 C1 49 34 D0 37 56 3D 93 0F 48 19 8A 0A
 0050 | A7 C1 40 58 22 94 93 D2 25 30 F4 DB FA 33 6F 6E
@@ -532,23 +532,23 @@ answer = BA0D89B550042280E4B67C3077D4A0C12D4D1EC1F2E4639D99B8105CA20D76A05FD11F8
 0100 | F4 7B F9 59 D9 56 85 0C E9 29 85 1F 0D 81 15 F6
 0110 | 35 B1 05 EE 2E 4E 15 D0 4B 24 54 BF 6F 4F AD F0
 0120 | 34 B1 04 03 11 9C D8 E3 B9 2F CC 5B FE 00 01 00
-0130 | AF 72 F3 96 3F DB A1 66 5B 55 44 7F D1 D6 E0 08
-0140 | 5A 7B 44 99 9E 83 4C E1 6D 60 0D A9 7D D4 4E 70
-0150 | D4 AF E2 C8 BD D5 1B 7B 1C D9 21 D5 66 A9 D8 9C
-0160 | AE 5C A7 BF 4C 88 DA 69 4E AE C3 EC A1 A9 38 FE
-0170 | 62 6D 3A 1D 2E D8 4D 94 04 AB C3 7E D8 62 9A 63
-0180 | 8F 85 91 F4 41 A2 1F 4B E3 38 8F DE 34 B2 71 C9
-0190 | 69 2F 2E BD 1F 3B AB 1A 6C E3 91 A0 40 1D 3F 04
-01A0 | 17 FF F9 66 09 17 8D 4C F3 D3 CE 15 64 26 4D D6
-01B0 | 26 67 19 A5 59 BB 5E 40 A6 B6 99 55 BB BE 32 F0
-01C0 | CF B7 BD AA 0B 3A 52 CD 1A 6A 72 B8 7C 9E E6 64
-01D0 | 95 C1 AC CC A3 BD A8 29 92 29 D0 04 5D 59 F9 79
-01E0 | 5B D3 B3 8F C7 A5 4E E5 90 20 0E 95 EE 7C 73 9E
-01F0 | A8 0A DE E5 56 49 22 60 09 BC 14 D3 67 97 61 3D
-0200 | C4 22 0B 12 66 31 A4 13 71 73 9F D6 3F 3F AE 3E
-0210 | 52 19 B9 16 4E 45 EA 8B FE BF 57 B2 39 65 5B 17
-0220 | 45 D7 30 65 C0 5E 7A 3D D6 9F 03 31 AF F4 B5 9E
-0230 | B2 3F A1 66
+0130 | BB CC 9D 18 A3 48 99 FB 13 B9 87 A3 CD CD 83 8D +0140 | CE 93 45 54 B9 87 53 F0 95 E8 90 A9 B2 93 4D 14 +0150 | 4F 8E 07 53 1A 55 22 63 6C 85 B5 94 D1 57 6A 0C +0160 | 56 C1 C2 9C 99 42 12 94 23 8F E8 00 6B 59 EC 9E +0170 | F5 BE 48 DE 20 8B 31 34 FE D5 41 52 56 A6 1D B9 +0180 | 2F F6 30 B3 41 DF FB 47 5C C3 BA FA 8C 85 78 BD +0190 | D5 CD 41 C7 EC 15 D0 54 36 BC 6E 30 BB D0 0A 76 +01A0 | FC 79 CD 74 39 66 15 3C 8D 0D C3 90 83 E4 DF 24 +01B0 | 9B 30 F7 E9 82 61 11 24 10 DF BC 70 C9 69 9C 1C +01C0 | D4 23 36 50 D5 7B B9 1E E1 BD 38 12 94 80 7D CA +01D0 | 26 DE E3 EB F3 7A DD 9E 36 1E 4D CA 6C A3 5F 53 +01E0 | 96 05 11 6E F1 D7 41 29 33 E4 56 51 A1 C2 E9 EF +01F0 | 67 BC 39 3F B9 E7 10 36 42 9D 7B 66 52 85 43 DD +0200 | 65 7C 30 04 36 C9 68 DE 7A 03 3A 1E 55 0E 22 E8 +0210 | 25 A3 F7 48 1A F4 BB B7 DA DA F6 40 EF 26 57 88 +0220 | 81 35 46 C7 F9 89 8F 2E 8C DD 45 A6 88 9F D1 63 +0230 | 7B 43 A1 66

Payload (de)serialization:

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;
message_id 8, 801588F4DB23FA16601E08BA37B43A166 Message ID generated as specified here » (unixtime() << 32) + (N*4)
message_length 16, 4A0020000 (672 in decimal)A4020000 (676 in decimal) Message body length
nonce 24, 1650042280E4B67C3077D4A0C12D4D1EC166CD1076621B9E73E9F5D2635F0C1A01 Value generated by client in Step 1
server_nonce 40, 16F2E4639D99B8105CA20D76A05FD11F8426AFA97C5FD77FF1E039D14000ED241D Value received from server in Step 2
encrypted_answer 56, 596FE500200105AA2CBD85DD33A5D1EF860 2F11A15F254061F89CE538CBA274A185 FE0A087693CC62B800CFA1645F9F2896 4FE79766B1CFF048BF9E38ED3239D0D4 0D0954FEC46799E451E265AD2D8F5C09 1D26229977F83AD7FA9FD86245D2F578 6AD0C0FB79AA325A95917C885B87DB1F 273F88EE9B7DB18F69263BC710C29C3C 69294C85BC5A3F672FA966AA43C90AA4 5EF596139D9D61C965C557BB25D3EA2E D73BACA459EFFEEFA8AB2814F56E841B 31E40DBDB97758FDDD6698A686C919C2 07C5D67B6E350F7928024D614C63BB8B A99F74C4D9674303FB37ECD0CE540249 9784EDC04B215EF67B1B5515C2E671D2 60C48303C9DB498C6444AAE181111C84 9C3E908D4F5618FCB50926FC3FBD4A67 56EFEF9A1E9C9808652AE01466FFF6E3 E9DB555FFAC91106F171E05D358A7627 74ACA513F578036FD8078DCCCB439018 F6D8CE7C7938EAC5A45EFCE2409A44FD 042547D3FD16E846661909A377B1CD42 54BFE51B1939A4FF5297C5A9FF7B8F4E D6112DAD5D4C3D88E2E128D5824802DC 75514B3659870BD56B1CD470F846CEEA 6D2A23AC696741F16142A13F490D47AE 2906EFAA0735F991D69FB88D7AD4CFA5 40A1AAFA5C7F6ECBCEFBBD9CDABFC0D7 89E3CCA6DE3042ECDF524233218C419A 8A3C187F2551A480D27DB9C876F672EF 39D2BC8F8B95B70A84F75D24C54D6255 A2F8751A38FCC64EEA0896DE76CEC58D 899EFA8B20AF3CFC579C3614D5A95E2C 6EB9A20486111A80B24712D3CC50D3E1 67A5C7089A63EE6FAF1C60DF6357F881 C4E2AFDC58C691C7083D7639DCCE5E1D FFF0B41EF577BCB84CC1803D7124D398
CD5B6F97
FE50020018B91A33DEF85AFB14DFCA63 3597CDBAB2C2344D8AF8F544205E4863 F1D34077F9771C758D227DBAA3BB9F3C FEF72F5C79CC3CD059288FCC65164619 3E13BDCA93A223E5040BC30F3F902A11 129065B48A650EFBF676CF7138C21C33 5F40ECAEBAE9CDA43D39D4A358559992 3B15FCFAC897A28DB50B547D9AB2D9B7 B0405B6593036D12FA41500F3A03F7E9 C624B06BC1A4D916941C390F63D5F518 0943D3F80C3FE530079655E23C4C1EB2 2A9FFEA372E66A417D604FD6D05F3435 88C2BC8F927A84447BEFCA8BC90BE12C D237376D167317126AD25E7C2A808370 CF9D6388CCCE13CC49F8EAE4A36C9744 F311CB79600504E1A05BF21671A1BAAA 52D38F383EF56CBD6BA4D5E914A93550 FF74CCE1DA5ECD5C77EDAF39F5ACBE7E 8DBE21DFFB1A998099D41347095EE9B7 5D2E63E745D11B004BDF7946FA8CA7AF 0F08BA2D8A41BA9B8FB27B25DD5F5E28 CFB7C09058D4C4EDDFF7FBE833ECFB98 C3BC36C3ECE4521595F2246FDB05D9C3 032A24A985A7895F3A84B4A77C6D6E19 5A589446796944E6B54EB08755CD4F03 C507A1F8865451C44BF3DB53DA1F95DD 8F0D164241C084438FACF5DD5CE91E1F BAB4AE23DF5888EA49705D85887F3740 D2FD1387ADD0F1D0B59769E7A1247213 7A6599BB08025B3796695E343F3933BF AF19DA9B9D1352E8A5ED5D013B118486 ACF976B8AAE865362C209CB492A9347E 09B301369DE8C56DE5061EDED37CB5E3 1DFA98DB4A2773FB0736A187ED5F4692 2D37446F1C6E26DD64CC1CD1A38C07D9 9ACAFBF7C6099103BAA4932CC1A28FD0 C35B2D6CFB9D73F9F3FD9006DDDAB13D
23085D80
See below
@@ -570,13 +570,13 @@ answer = BA0D89B550042280E4B67C3077D4A0C12D4D1EC1F2E4639D99B8105CA20D76A05FD11F8 - + - + @@ -594,13 +594,13 @@ answer = BA0D89B550042280E4B67C3077D4A0C12D4D1EC1F2E4639D99B8105CA20D76A05FD11F8 - + - + @@ -609,34 +609,34 @@ answer = BA0D89B550042280E4B67C3077D4A0C12D4D1EC1F2E4639D99B8105CA20D76A05FD11F8
7) Client computes random 2048-bit number b (using a sufficient amount of entropy) and sends the server a message

First, generate a secure random 2048-bit number b:

-
b = 93831429A46135EDDDD7FA9F99A950A8F978D0A68E8D7B157E1E15BF5491C86C19F72A34ED3AD9D6E4135149055ACE071B83C077005A7E13DD657933D6F456BAD726BBF52A6245236DFB4C1C4E9B94286A2B8B7E597B890E3274939AD16CD51E9C42F574BCD2B1328CBE1B82E731ABCD8CDD751A74454F23461C0C7A5A939512B0BAC1D304D921ECDFCA0024D5232200E0BE5DB9EC5FCD7D0544BE0DC87C78585DA374636733153DFD9B795E59696EC94E5B5C3DDC26EA57FF31E0ADE45E274904EAC9749C8E4C5CEE0B8A4D568FE53798A7B12390B70FF3B5420FF8737B03D86AA79A318894BC57BA78AB65CC9EC4362290B3DE859A52A83485BE9F3CC59DE9
+
b = F3BD198E3CC3EFD50CD81617DEC349D6D1CED6F151A3CF2FDB8474C745B699024DFF87C750C1F1010337E7978602B9CF5A40886FA213B8CAD0DDDCEFFA24E5085CDBDC0B7AA83CD5EE3B4D556F17B0E8D75FA54ABDC2FC158B6A85E84EEA42BBA411805625F08922C83D3736B580B69003BDF7F25DE7216094305A4C384A1C98446D1572BE84ECB8A217DF614D6B7B32E473A1C2B8C8AF7DC957F7CA88D42BD3CDA313CC685434E3AEC33125C486983C799DAA1712AB9113539A555F932CF7ACF4C0F5FAD58EA6A2D4441738312EA3A021F0CCB49C79DD54BB9E4AA8938C33BA64016CFAE612641C4D9D080A08B15879CAA6DA8DCADFBF0EED807293433251A4

Then compute g_b = pow(g, b) mod dh_prime

-
g_b = A19FC9C0AB9D0660D1FC2A6FA650B68422641BE7BD061CC7D1F909B12DF949E884D2FCD2F97E777C6583577F57F488AA8CEBF3F05C38194F9B9D17874D33E6ED37A5CBE1E53693C99A03137344CD3BE2BF92090DB52AB1FDA3825E879353A78BF6BC1C890301518C1E4E86A5B183A0B3A7C6F99AC6AC57DC42DCA8CE3FD1CE726F07D68AF73D5845CC0FD7746D11037D8BE9AF2F6B0726FDA1CEB97F309653E97CD36F321DCD7829ED9C9BCD1799C8A19F39F721358AC0581CE7BFA95BE2BD840FA03888ED2A04745B2910E5289800A42B3A6569CE9EAD24E7ED51E44D4D1ACE7F2C121B228E584E26D698D613ECC0CCAEE72E9ACA01BF3901D94027327FD1C1
+
g_b = 9B35B0EE11899D4E05822A62AE8FBE66F760548CFB05D137B00A90B349D0FB053E66AB85CA80E7347960D6780CB79A2FEA109EACB12BCBE9C8D8D66DB20C4D40475ADBBCFEB1E5E8B346BA902EBE0AE9A00FB96337218A46E66CC5323AE8F88EE814707FA57887FF010FEE519704DE88056B5C3BDBF8D911DA07B2E9F615C41C495A47372AC3E8D5604D24B2C94737142CE8FA10765C7575CEA0136B3B2F17CC93B2CC5C46EB8C7416CAFFD346C9784B7A3B50EE2B064380087F3E86EBE9C2679DC1F4A238C9D27660FDE64C53798EC23BBB36F602441F37B2F370F1F3379D0FB57FCA43B9A58B4CA7022E658D0D93849543CAC46DDFB27D6DDED4174DDA97CB
7.1) generation of encrypted_data

Generated payload (excluding transport headers/trailers):

-
0000 | 54 B6 43 66 50 04 22 80 E4 B6 7C 30 77 D4 A0 C1
-0010 | 2D 4D 1E C1 F2 E4 63 9D 99 B8 10 5C A2 0D 76 A0
-0020 | 5F D1 1F 84 00 00 00 00 00 00 00 00 FE 00 01 00
-0030 | A1 9F C9 C0 AB 9D 06 60 D1 FC 2A 6F A6 50 B6 84
-0040 | 22 64 1B E7 BD 06 1C C7 D1 F9 09 B1 2D F9 49 E8
-0050 | 84 D2 FC D2 F9 7E 77 7C 65 83 57 7F 57 F4 88 AA
-0060 | 8C EB F3 F0 5C 38 19 4F 9B 9D 17 87 4D 33 E6 ED
-0070 | 37 A5 CB E1 E5 36 93 C9 9A 03 13 73 44 CD 3B E2
-0080 | BF 92 09 0D B5 2A B1 FD A3 82 5E 87 93 53 A7 8B
-0090 | F6 BC 1C 89 03 01 51 8C 1E 4E 86 A5 B1 83 A0 B3
-00A0 | A7 C6 F9 9A C6 AC 57 DC 42 DC A8 CE 3F D1 CE 72
-00B0 | 6F 07 D6 8A F7 3D 58 45 CC 0F D7 74 6D 11 03 7D
-00C0 | 8B E9 AF 2F 6B 07 26 FD A1 CE B9 7F 30 96 53 E9
-00D0 | 7C D3 6F 32 1D CD 78 29 ED 9C 9B CD 17 99 C8 A1
-00E0 | 9F 39 F7 21 35 8A C0 58 1C E7 BF A9 5B E2 BD 84
-00F0 | 0F A0 38 88 ED 2A 04 74 5B 29 10 E5 28 98 00 A4
-0100 | 2B 3A 65 69 CE 9E AD 24 E7 ED 51 E4 4D 4D 1A CE
-0110 | 7F 2C 12 1B 22 8E 58 4E 26 D6 98 D6 13 EC C0 CC
-0120 | AE E7 2E 9A CA 01 BF 39 01 D9 40 27 32 7F D1 C1
+
0000 | 54 B6 43 66 66 CD 10 76 62 1B 9E 73 E9 F5 D2 63
+0010 | 5F 0C 1A 01 26 AF A9 7C 5F D7 7F F1 E0 39 D1 40
+0020 | 00 ED 24 1D 00 00 00 00 00 00 00 00 FE 00 01 00
+0030 | 9B 35 B0 EE 11 89 9D 4E 05 82 2A 62 AE 8F BE 66
+0040 | F7 60 54 8C FB 05 D1 37 B0 0A 90 B3 49 D0 FB 05
+0050 | 3E 66 AB 85 CA 80 E7 34 79 60 D6 78 0C B7 9A 2F
+0060 | EA 10 9E AC B1 2B CB E9 C8 D8 D6 6D B2 0C 4D 40
+0070 | 47 5A DB BC FE B1 E5 E8 B3 46 BA 90 2E BE 0A E9
+0080 | A0 0F B9 63 37 21 8A 46 E6 6C C5 32 3A E8 F8 8E
+0090 | E8 14 70 7F A5 78 87 FF 01 0F EE 51 97 04 DE 88
+00A0 | 05 6B 5C 3B DB F8 D9 11 DA 07 B2 E9 F6 15 C4 1C
+00B0 | 49 5A 47 37 2A C3 E8 D5 60 4D 24 B2 C9 47 37 14
+00C0 | 2C E8 FA 10 76 5C 75 75 CE A0 13 6B 3B 2F 17 CC
+00D0 | 93 B2 CC 5C 46 EB 8C 74 16 CA FF D3 46 C9 78 4B
+00E0 | 7A 3B 50 EE 2B 06 43 80 08 7F 3E 86 EB E9 C2 67
+00F0 | 9D C1 F4 A2 38 C9 D2 76 60 FD E6 4C 53 79 8E C2
+0100 | 3B BB 36 F6 02 44 1F 37 B2 F3 70 F1 F3 37 9D 0F
+0110 | B5 7F CA 43 B9 A5 8B 4C A7 02 2E 65 8D 0D 93 84
+0120 | 95 43 CA C4 6D DF B2 7D 6D DE D4 17 4D DA 97 CB

Payload (de)serialization:

client_DH_inner_data#6643b654 nonce:int128 server_nonce:int128 retry_id:long g_b:string = Client_DH_Inner_Data;
nonce 4, 1650042280E4B67C3077D4A0C12D4D1EC166CD1076621B9E73E9F5D2635F0C1A01 Value generated by client in Step 1
server_nonce 20, 16F2E4639D99B8105CA20D76A05FD11F8426AFA97C5FD77FF1E039D14000ED241D Value received from server in Step 2
g_a 300, 260FE000100AF72F3963FDBA1665B55447F D1D6E0085A7B44999E834CE16D600DA9 7DD44E70D4AFE2C8BDD51B7B1CD921D5 66A9D89CAE5CA7BF4C88DA694EAEC3EC A1A938FE626D3A1D2ED84D9404ABC37E D8629A638F8591F441A21F4BE3388FDE 34B271C9692F2EBD1F3BAB1A6CE391A0 401D3F0417FFF96609178D4CF3D3CE15 64264DD6266719A559BB5E40A6B69955 BBBE32F0CFB7BDAA0B3A52CD1A6A72B8 7C9EE66495C1ACCCA3BDA8299229D004 5D59F9795BD3B38FC7A54EE590200E95 EE7C739EA80ADEE55649226009BC14D3 6797613DC4220B126631A41371739FD6 3F3FAE3E5219B9164E45EA8BFEBF57B2 39655B1745D73065C05E7A3DD69F0331
AFF4B59E
FE000100BBCC9D18A34899FB13B987A3 CDCD838DCE934554B98753F095E890A9 B2934D144F8E07531A5522636C85B594 D1576A0C56C1C29C99421294238FE800 6B59EC9EF5BE48DE208B3134FED54152 56A61DB92FF630B341DFFB475CC3BAFA 8C8578BDD5CD41C7EC15D05436BC6E30 BBD00A76FC79CD743966153C8D0DC390 83E4DF249B30F7E98261112410DFBC70 C9699C1CD4233650D57BB91EE1BD3812 94807DCA26DEE3EBF37ADD9E361E4DCA 6CA35F539605116EF1D7412933E45651 A1C2E9EF67BC393FB9E71036429D7B66 528543DD657C300436C968DE7A033A1E 550E22E825A3F7481AF4BBB7DADAF640 EF265788813546C7F9898F2E8CDD45A6
889FD163
g_a diffie-hellman parameter
server_time 560, 4B23FA166 (1721843634 in decimal)7B43A166 (1721844603 in decimal) Server time
@@ -658,19 +658,19 @@ answer = BA0D89B550042280E4B67C3077D4A0C12D4D1EC1F2E4639D99B8105CA20D76A05FD11F8 - + - + - + @@ -684,47 +684,47 @@ answer = BA0D89B550042280E4B67C3077D4A0C12D4D1EC1F2E4639D99B8105CA20D76A05FD11F8

The serialization of Client_DH_Inner_Data produces a string data. This is used to generate encrypted_data as specified in step 6, using the following inputs:

-
data = 54B6436650042280E4B67C3077D4A0C12D4D1EC1F2E4639D99B8105CA20D76A05FD11F840000000000000000FE000100A19FC9C0AB9D0660D1FC2A6FA650B68422641BE7BD061CC7D1F909B12DF949E884D2FCD2F97E777C6583577F57F488AA8CEBF3F05C38194F9B9D17874D33E6ED37A5CBE1E53693C99A03137344CD3BE2BF92090DB52AB1FDA3825E879353A78BF6BC1C890301518C1E4E86A5B183A0B3A7C6F99AC6AC57DC42DCA8CE3FD1CE726F07D68AF73D5845CC0FD7746D11037D8BE9AF2F6B0726FDA1CEB97F309653E97CD36F321DCD7829ED9C9BCD1799C8A19F39F721358AC0581CE7BFA95BE2BD840FA03888ED2A04745B2910E5289800A42B3A6569CE9EAD24E7ED51E44D4D1ACE7F2C121B228E584E26D698D613ECC0CCAEE72E9ACA01BF3901D94027327FD1C1
-padding = B08362F89D08E0945C49D4B6
-tmp_aes_key = 0862009CDA343B604C16E1FB67162F4A6E0328779435AE8B32B844D8B8AE1B27
-tmp_aes_iv = D322BF7B0FE3405722AE697F94816E143A5EB539D3129610D71EA71C3C0C1014
+
data = 54B6436666CD1076621B9E73E9F5D2635F0C1A0126AFA97C5FD77FF1E039D14000ED241D0000000000000000FE0001009B35B0EE11899D4E05822A62AE8FBE66F760548CFB05D137B00A90B349D0FB053E66AB85CA80E7347960D6780CB79A2FEA109EACB12BCBE9C8D8D66DB20C4D40475ADBBCFEB1E5E8B346BA902EBE0AE9A00FB96337218A46E66CC5323AE8F88EE814707FA57887FF010FEE519704DE88056B5C3BDBF8D911DA07B2E9F615C41C495A47372AC3E8D5604D24B2C94737142CE8FA10765C7575CEA0136B3B2F17CC93B2CC5C46EB8C7416CAFFD346C9784B7A3B50EE2B064380087F3E86EBE9C2679DC1F4A238C9D27660FDE64C53798EC23BBB36F602441F37B2F370F1F3379D0FB57FCA43B9A58B4CA7022E658D0D93849543CAC46DDFB27D6DDED4174DDA97CB
+padding = B646261505D593BCB4C1D796
+tmp_aes_key = 9C9BB7C3AA015DBE62FE5577D0C089EF7C0A6EE4350CAC3BEE267C92AF846BBF
+tmp_aes_iv = E8F23793463529F1EBDB9B64830F0D3FDD9F5AD447CBBFF257E7385F9A879B42

Process:

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);

Output:

-
encrypted_data = 65DD9E82DAF5DC0BAE54B8E1A723406231C580667F99E9518EC40A39E8802005E98ADAC58E1C35E5B7BE7032B707818307FD5518D88BEC9AC84C57CA24813180AE0DDF16BE8AD5F03FB71E3C7958F5FA65995BAFF21375B309E52870BBE1C4D530B60983C584D3E1F6D91342CB6B22BB843B97825C9FFD0482F19055202254B1A8E5DBC1B7A40CC673845423358537D363B70F56466B3BC197FBCC15A336688F64FFE8072D8FF7BA9F1CEDC9E7A3EE4680522A9DE52B154D9528C2CE14A68ED1353E4657A386F758FE85A341A37C4A7451B1B1539D47CD846CC401B190E81F9D593D377E8B5313DF39A55230D69C983475231133456F645C69963F2C9E0EFC214577A3DFA62A2BF28E81439030A094627F3CC56127B6661EEE5247AE5D2FCA3BE86B07A43B434F8A474DBB5A0B66CDEE80AE6406A7D0E791A9F37AE5F9459C07D429C601A1352485D6AC5369F6AD623A
+
encrypted_data = C533E5FB208024045491BC78D56FDCA13C02E9C40463BC90AB7A97D62D44445686762FCB33E2E286AB1A9186B0CDD436892E970DCE565F34D8EAAEB72E11B615E4ED0C6871577AE4ED5A8AB10BE7BCB31CA00E9902CF33DC26D9571B02AC2D2E8827BEE24CE00513CC95BD39B8B705597A05CDEBBEFD4FBABA1EB72B6DC628ACB7B0CBCD9DDD511E98B93C7671E74B7F3667A04DAF15D4C613A64E4F5870E1CF5027D199C4D95394A3A7E7AFD371CE9045E0DAF48C1C48AEC248A51363C6401CCE30EA0B2A5EB41F5112FCBC58AB40369BF0153A880D54B1634114E47FCCD12C76486F9621C98B2B963CE0CA37E23A0017DC61E8778F544A8167C8DE3A1067EFC53B064D0578F2D3D867B562D027FBE20E08D4AD3232922A95E9C2BFF803F7E80B814969297B1D380084DD21C39C7B78A497CEFA2E9F167595DB499B6661B0AC0E339CB57F9F7ED64433A7806FAB7B29

The length of the final string is 336 bytes.

7.2) set_client_DH_params query

Sent payload (excluding transport headers/trailers):

-
0000 | 00 00 00 00 00 00 00 00 34 5A 00 00 B2 3F A1 66
-0010 | 78 01 00 00 1F 5F 04 F5 50 04 22 80 E4 B6 7C 30
-0020 | 77 D4 A0 C1 2D 4D 1E C1 F2 E4 63 9D 99 B8 10 5C
-0030 | A2 0D 76 A0 5F D1 1F 84 FE 50 01 00 65 DD 9E 82
-0040 | DA F5 DC 0B AE 54 B8 E1 A7 23 40 62 31 C5 80 66
-0050 | 7F 99 E9 51 8E C4 0A 39 E8 80 20 05 E9 8A DA C5
-0060 | 8E 1C 35 E5 B7 BE 70 32 B7 07 81 83 07 FD 55 18
-0070 | D8 8B EC 9A C8 4C 57 CA 24 81 31 80 AE 0D DF 16
-0080 | BE 8A D5 F0 3F B7 1E 3C 79 58 F5 FA 65 99 5B AF
-0090 | F2 13 75 B3 09 E5 28 70 BB E1 C4 D5 30 B6 09 83
-00A0 | C5 84 D3 E1 F6 D9 13 42 CB 6B 22 BB 84 3B 97 82
-00B0 | 5C 9F FD 04 82 F1 90 55 20 22 54 B1 A8 E5 DB C1
-00C0 | B7 A4 0C C6 73 84 54 23 35 85 37 D3 63 B7 0F 56
-00D0 | 46 6B 3B C1 97 FB CC 15 A3 36 68 8F 64 FF E8 07
-00E0 | 2D 8F F7 BA 9F 1C ED C9 E7 A3 EE 46 80 52 2A 9D
-00F0 | E5 2B 15 4D 95 28 C2 CE 14 A6 8E D1 35 3E 46 57
-0100 | A3 86 F7 58 FE 85 A3 41 A3 7C 4A 74 51 B1 B1 53
-0110 | 9D 47 CD 84 6C C4 01 B1 90 E8 1F 9D 59 3D 37 7E
-0120 | 8B 53 13 DF 39 A5 52 30 D6 9C 98 34 75 23 11 33
-0130 | 45 6F 64 5C 69 96 3F 2C 9E 0E FC 21 45 77 A3 DF
-0140 | A6 2A 2B F2 8E 81 43 90 30 A0 94 62 7F 3C C5 61
-0150 | 27 B6 66 1E EE 52 47 AE 5D 2F CA 3B E8 6B 07 A4
-0160 | 3B 43 4F 8A 47 4D BB 5A 0B 66 CD EE 80 AE 64 06
-0170 | A7 D0 E7 91 A9 F3 7A E5 F9 45 9C 07 D4 29 C6 01
-0180 | A1 35 24 85 D6 AC 53 69 F6 AD 62 3A
+
0000 | 00 00 00 00 00 00 00 00 80 14 01 00 7C 43 A1 66
+0010 | 78 01 00 00 1F 5F 04 F5 66 CD 10 76 62 1B 9E 73
+0020 | E9 F5 D2 63 5F 0C 1A 01 26 AF A9 7C 5F D7 7F F1
+0030 | E0 39 D1 40 00 ED 24 1D FE 50 01 00 C5 33 E5 FB
+0040 | 20 80 24 04 54 91 BC 78 D5 6F DC A1 3C 02 E9 C4
+0050 | 04 63 BC 90 AB 7A 97 D6 2D 44 44 56 86 76 2F CB
+0060 | 33 E2 E2 86 AB 1A 91 86 B0 CD D4 36 89 2E 97 0D
+0070 | CE 56 5F 34 D8 EA AE B7 2E 11 B6 15 E4 ED 0C 68
+0080 | 71 57 7A E4 ED 5A 8A B1 0B E7 BC B3 1C A0 0E 99
+0090 | 02 CF 33 DC 26 D9 57 1B 02 AC 2D 2E 88 27 BE E2
+00A0 | 4C E0 05 13 CC 95 BD 39 B8 B7 05 59 7A 05 CD EB
+00B0 | BE FD 4F BA BA 1E B7 2B 6D C6 28 AC B7 B0 CB CD
+00C0 | 9D DD 51 1E 98 B9 3C 76 71 E7 4B 7F 36 67 A0 4D
+00D0 | AF 15 D4 C6 13 A6 4E 4F 58 70 E1 CF 50 27 D1 99
+00E0 | C4 D9 53 94 A3 A7 E7 AF D3 71 CE 90 45 E0 DA F4
+00F0 | 8C 1C 48 AE C2 48 A5 13 63 C6 40 1C CE 30 EA 0B
+0100 | 2A 5E B4 1F 51 12 FC BC 58 AB 40 36 9B F0 15 3A
+0110 | 88 0D 54 B1 63 41 14 E4 7F CC D1 2C 76 48 6F 96
+0120 | 21 C9 8B 2B 96 3C E0 CA 37 E2 3A 00 17 DC 61 E8
+0130 | 77 8F 54 4A 81 67 C8 DE 3A 10 67 EF C5 3B 06 4D
+0140 | 05 78 F2 D3 D8 67 B5 62 D0 27 FB E2 0E 08 D4 AD
+0150 | 32 32 92 2A 95 E9 C2 BF F8 03 F7 E8 0B 81 49 69
+0160 | 29 7B 1D 38 00 84 DD 21 C3 9C 7B 78 A4 97 CE FA
+0170 | 2E 9F 16 75 95 DB 49 9B 66 61 B0 AC 0E 33 9C B5
+0180 | 7F 9F 7E D6 44 33 A7 80 6F AB 7B 29

Payload (de)serialization:

set_client_DH_params#f5045f1f nonce:int128 server_nonce:int128 encrypted_data:string = Set_client_DH_params_answer;
nonce 4, 1650042280E4B67C3077D4A0C12D4D1EC166CD1076621B9E73E9F5D2635F0C1A01 Value generated by client in Step 1
server_nonce 20, 16F2E4639D99B8105CA20D76A05FD11F8426AFA97C5FD77FF1E039D14000ED241D Value received from server in Step 2
g_b 36, 260FE000100A19FC9C0AB9D0660D1FC2A6F A650B68422641BE7BD061CC7D1F909B1 2DF949E884D2FCD2F97E777C6583577F 57F488AA8CEBF3F05C38194F9B9D1787 4D33E6ED37A5CBE1E53693C99A031373 44CD3BE2BF92090DB52AB1FDA3825E87 9353A78BF6BC1C890301518C1E4E86A5 B183A0B3A7C6F99AC6AC57DC42DCA8CE 3FD1CE726F07D68AF73D5845CC0FD774 6D11037D8BE9AF2F6B0726FDA1CEB97F 309653E97CD36F321DCD7829ED9C9BCD 1799C8A19F39F721358AC0581CE7BFA9 5BE2BD840FA03888ED2A04745B2910E5 289800A42B3A6569CE9EAD24E7ED51E4 4D4D1ACE7F2C121B228E584E26D698D6 13ECC0CCAEE72E9ACA01BF3901D94027
327FD1C1
FE0001009B35B0EE11899D4E05822A62 AE8FBE66F760548CFB05D137B00A90B3 49D0FB053E66AB85CA80E7347960D678 0CB79A2FEA109EACB12BCBE9C8D8D66D B20C4D40475ADBBCFEB1E5E8B346BA90 2EBE0AE9A00FB96337218A46E66CC532 3AE8F88EE814707FA57887FF010FEE51 9704DE88056B5C3BDBF8D911DA07B2E9 F615C41C495A47372AC3E8D5604D24B2 C94737142CE8FA10765C7575CEA0136B 3B2F17CC93B2CC5C46EB8C7416CAFFD3 46C9784B7A3B50EE2B064380087F3E86 EBE9C2679DC1F4A238C9D27660FDE64C 53798EC23BBB36F602441F37B2F370F1 F3379D0FB57FCA43B9A58B4CA7022E65 8D0D93849543CAC46DDFB27D6DDED417
4DDA97CB
Single-byte prefix denoting length, a 256-byte (2048-bit) string, and zero bytes of padding
@@ -746,7 +746,7 @@ encrypted_data := AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv);< - + @@ -764,19 +764,19 @@ encrypted_data := AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv);< - + - + - + @@ -785,17 +785,17 @@ encrypted_data := AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv);<
8) Auth key generation

The client computes the auth_key using formula g_a^b mod dh_prime:

-
auth_key = 7E5156146BF2D2DDE7418F5C735C5F082962E97EF2B9B04670CD5FB3D7A94251D285D0076530C55AE95E214271371E4DB14A1CD9139C0C06E3E094C089C536C4E09CF0FDA412F6E8EA118AF0500CC2F52E1999EB80286E3A0E96E975D02DEA483171812CE30E33DF2FB30B684F4338C80BBB8EC73373CCE122DF4EEC43487720D6606C4825D17FB08EB103056D65AB77177C2B182714082187325AC1ABEA620C2FEF4F8E33B43DDF9A826C0E58657DEFC195461CA906600C66102E2F61C773E92D00FA00C37FA9A424467006BEA612364A046F40B64681677C1E1C144B8D7C60255747A1E99284D98ACDAC8DD05470AEB777E371288A5E7285AB82CB39F736A5
+
auth_key = 4276EF1032C70A4E35670EAF0E50151FFD3EC40D76DDFB6F1E034ABDAB81639D82E7E7CF136998ED3BEE8043BFD2B9E4D6BCCBD454C8B1981A215ADA694516C6E63F033D3243FC8309FA37441C1BC7FE9F478B463A99ADB3A9AD3A05C31946E23641A2EFD932AA92B3FA945381F4CD242FCBF7B5405C01B770D116531F94282DBA1B8D084326527D7CA31D38A3E8609CB9E5E2550C34C5FF1B48F007C9548CEF02786EA179FA31C30EF2487116C5EF267994F77E79D851E5A0D73A50AC6A706D19B941A6630EA092A4EB238EA3255CBCF02B32DE812DD69C93B49DD1EEE0DED53FC31698CA918BB51099E1FD514657228CC46FDAF446EBFC428CAE931B6725ED
9) Final server reply

The server verifies and confirms that auth_key_hash is unique: since it's unique, it replies with the following:

Received payload (excluding transport headers/trailers):

-
0000 | 00 00 00 00 00 00 00 00 01 24 35 2E B3 3F A1 66
-0010 | 34 00 00 00 34 F7 CB 3B 50 04 22 80 E4 B6 7C 30
-0020 | 77 D4 A0 C1 2D 4D 1E C1 F2 E4 63 9D 99 B8 10 5C
-0030 | A2 0D 76 A0 5F D1 1F 84 02 19 CE AD 56 AF EB A2
-0040 | C0 3B 7C 92 B3 63 97 D0
+
0000 | 00 00 00 00 00 00 00 00 01 90 46 C9 7C 43 A1 66
+0010 | 3C 00 00 00 34 F7 CB 3B 66 CD 10 76 62 1B 9E 73
+0020 | E9 F5 D2 63 5F 0C 1A 01 26 AF A9 7C 5F D7 7F F1
+0030 | E0 39 D1 40 00 ED 24 1D 68 01 01 49 64 44 91 E7
+0040 | 76 C7 E3 8A 54 E3 33 F9

Payload (de)serialization:

dh_gen_ok#3bcbf734 nonce:int128 server_nonce:int128 new_nonce_hash1:int128 = Set_client_DH_params_answer;
message_id 8, 8345A0000B23FA166801401007C43A166 Message ID generated as specified here » (unixtime() << 32) + (N*4)
nonce 24, 1650042280E4B67C3077D4A0C12D4D1EC166CD1076621B9E73E9F5D2635F0C1A01 Value generated by client in Step 1
server_nonce 40, 16F2E4639D99B8105CA20D76A05FD11F8426AFA97C5FD77FF1E039D14000ED241D Value received from server in Step 2
encrypted_data 56, 340FE50010065DD9E82DAF5DC0BAE54B8E1 A723406231C580667F99E9518EC40A39 E8802005E98ADAC58E1C35E5B7BE7032 B707818307FD5518D88BEC9AC84C57CA 24813180AE0DDF16BE8AD5F03FB71E3C 7958F5FA65995BAFF21375B309E52870 BBE1C4D530B60983C584D3E1F6D91342 CB6B22BB843B97825C9FFD0482F19055 202254B1A8E5DBC1B7A40CC673845423 358537D363B70F56466B3BC197FBCC15 A336688F64FFE8072D8FF7BA9F1CEDC9 E7A3EE4680522A9DE52B154D9528C2CE 14A68ED1353E4657A386F758FE85A341 A37C4A7451B1B1539D47CD846CC401B1 90E81F9D593D377E8B5313DF39A55230 D69C983475231133456F645C69963F2C 9E0EFC214577A3DFA62A2BF28E814390 30A094627F3CC56127B6661EEE5247AE 5D2FCA3BE86B07A43B434F8A474DBB5A 0B66CDEE80AE6406A7D0E791A9F37AE5 F9459C07D429C601A1352485D6AC5369
F6AD623A
FE500100C533E5FB208024045491BC78 D56FDCA13C02E9C40463BC90AB7A97D6 2D44445686762FCB33E2E286AB1A9186 B0CDD436892E970DCE565F34D8EAAEB7 2E11B615E4ED0C6871577AE4ED5A8AB1 0BE7BCB31CA00E9902CF33DC26D9571B 02AC2D2E8827BEE24CE00513CC95BD39 B8B705597A05CDEBBEFD4FBABA1EB72B 6DC628ACB7B0CBCD9DDD511E98B93C76 71E74B7F3667A04DAF15D4C613A64E4F 5870E1CF5027D199C4D95394A3A7E7AF D371CE9045E0DAF48C1C48AEC248A513 63C6401CCE30EA0B2A5EB41F5112FCBC 58AB40369BF0153A880D54B1634114E4 7FCCD12C76486F9621C98B2B963CE0CA 37E23A0017DC61E8778F544A8167C8DE 3A1067EFC53B064D0578F2D3D867B562 D027FBE20E08D4AD3232922A95E9C2BF F803F7E80B814969297B1D380084DD21 C39C7B78A497CEFA2E9F167595DB499B 6661B0AC0E339CB57F9F7ED64433A780
6FAB7B29
Encrypted client_DH_inner_data generated previously, serialized as a TL byte string
@@ -817,13 +817,13 @@ encrypted_data := AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv);< - + - + @@ -835,19 +835,19 @@ encrypted_data := AES256_ige_encrypt (data_with_hash, tmp_aes_key, tmp_aes_iv);< - + - + - + diff --git a/data/web/corefork.telegram.org/type/InputPrivacyKey.html b/data/web/corefork.telegram.org/type/InputPrivacyKey.html index c61203ff8e..7e1fa40441 100644 --- a/data/web/corefork.telegram.org/type/InputPrivacyKey.html +++ b/data/web/corefork.telegram.org/type/InputPrivacyKey.html @@ -78,7 +78,7 @@ - + diff --git a/data/web/corefork.telegram.org/type/PrivacyKey.html b/data/web/corefork.telegram.org/type/PrivacyKey.html index 2eb97f113e..4e6cde97d3 100644 --- a/data/web/corefork.telegram.org/type/PrivacyKey.html +++ b/data/web/corefork.telegram.org/type/PrivacyKey.html @@ -78,7 +78,7 @@ - +
message_id 8, 80124352EB33FA166019046C97C43A166 Message ID generated as specified here » (unixtime() << 32) + (N*4)
message_length 16, 434000000 (52 in decimal)3C000000 (60 in decimal) Message body length
nonce 24, 1650042280E4B67C3077D4A0C12D4D1EC166CD1076621B9E73E9F5D2635F0C1A01 Value generated by client in Step 1
server_nonce 40, 16F2E4639D99B8105CA20D76A05FD11F8426AFA97C5FD77FF1E039D14000ED241D Value received from server in Step 2
new_nonce_hash1 56, 160219CEAD56AFEBA2C03B7C92B36397D068010149644491E776C7E38A54E333F9 The 128 lower-order bits of SHA1 of the byte string derived from the new_nonce string by adding a single byte with the value of 1, 2, or 3, and followed by another 8 bytes with auth_key_aux_hash. Different values are required to prevent an intruder from changing server response dh_gen_ok into dh_gen_retry.
inputPrivacyKeyStatusTimestampWhether people will be able to see our exact last online timestamp.

Note that if we decide to hide our exact last online timestamp to someone and we do not have a Premium subscription, we won't be able to see the exact last online timestamp of any user, including those that do share it with us.
Whether people will be able to see our exact last online timestamp.

Note that if we decide to hide our exact last online timestamp to someone (i.e., users A, B, C, or all users) and we do not have a Premium subscription, we won't be able to see the exact last online timestamp of those users (A, B, C, or all users), even if those users do share it with us.

If those users do share their exact online status with us, but we can't see it due to the reason mentioned above, the by_me flag of userStatusRecently, userStatusLastWeek, userStatusLastMonth will be set.
inputPrivacyKeyChatInvite
privacyKeyStatusTimestampWhether we can see the last online timestamp of this user.

Note that if we decide to hide our exact last online timestamp to someone (i.e., users A, B, C, or all users) and we do not have a Premium subscription, we won't be able to see the exact last online timestamp of those users (A, B, C, or all users), even if those users do share it with us.

If those users do share their exact online status with us, but we can't see it due to the reason mentioned above, the by_me flag of userStatusRecently, userStatusLastWeek, userStatusLastMonth.
Whether we can see the last online timestamp of this user.

Note that if we decide to hide our exact last online timestamp to someone (i.e., users A, B, C, or all users) and we do not have a Premium subscription, we won't be able to see the exact last online timestamp of those users (A, B, C, or all users), even if those users do share it with us.

If those users do share their exact online status with us, but we can't see it due to the reason mentioned above, the by_me flag of userStatusRecently, userStatusLastWeek, userStatusLastMonth will be set.
privacyKeyChatInvite