telegram-crawler/data/corefork.telegram.org/method/auth.bindTempAuthKey
2022-03-18 19:48:38 +00:00

252 lines
16 KiB
Text
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html class="">
<head>
<meta charset="utf-8">
<title>auth.bindTempAuthKey</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="description" content="Binds a temporary authorization key temp_auth_key_id to the permanent authorization key perm_auth_key_id. Each permanent key may only be bound to one temporary key at a time, binding a new temporary key overwrites the previous one.">
<meta property="og:title" content="auth.bindTempAuthKey">
<meta property="og:image" content="">
<meta property="og:description" content="Binds a temporary authorization key temp_auth_key_id to the permanent authorization key perm_auth_key_id. Each permanent key may only be bound to one temporary key at a time, binding a new temporary key overwrites the previous one.">
<link rel="shortcut icon" href="/favicon.ico?4" type="image/x-icon" />
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
<link href="/css/telegram.css?224" rel="stylesheet" media="screen">
<style>
</style>
</head>
<body class="preload">
<div class="dev_page_wrap">
<div class="dev_page_head navbar navbar-static-top navbar-tg">
<div class="navbar-inner">
<div class="container clearfix">
<ul class="nav navbar-nav navbar-right hidden-xs"><li class="navbar-twitter"><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)"><i class="icon icon-twitter"></i><span> Twitter</span></a></li></ul>
<ul class="nav navbar-nav">
<li><a href="//telegram.org/">Home</a></li>
<li class="hidden-xs"><a href="//telegram.org/faq">FAQ</a></li>
<li class="hidden-xs"><a href="//telegram.org/apps">Apps</a></li>
<li class="active"><a href="/api">API</a></li>
<li class=""><a href="/mtproto">Protocol</a></li>
<li class=""><a href="/schema">Schema</a></li>
</ul>
</div>
</div>
</div>
<div class="container clearfix">
<div class="dev_page">
<div id="dev_page_content_wrap" class=" ">
<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/auth.bindTempAuthKey" >auth.bindTempAuthKey</a></li></ul></div>
<h1 id="dev_page_title">auth.bindTempAuthKey</h1>
<div id="dev_page_content"><p>Binds a temporary authorization key <code>temp_auth_key_id</code> to the permanent authorization key <code>perm_auth_key_id</code>. Each permanent key may only be bound to one temporary key at a time, binding a new temporary key overwrites the previous one.</p>
<p>For more information, see <a href="/api/pfs">Perfect Forward Secrecy</a>.</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 139 <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="?layer=1">1 &ndash; Base layer</a></li><li><a href="?layer=2">2 &ndash; New userpic notifications</a></li><li><a href="?layer=3">3 &ndash; Send message can trigger link change</a></li><li><a href="?layer=4">4 &ndash; Check-in chats</a></li><li><a href="?layer=5">5 &ndash; Localized SMS, localized notifications</a></li><li><a href="?layer=6">6 &ndash; Foursquare integration</a></li><li><a href="?layer=7">7 &ndash; Added wallPaperSolid</a></li><li><a href="?layer=8">8 &ndash; Added end-to-end encryption</a></li><li><a href="?layer=9">9 &ndash; Improved big files upload perfomance</a></li><li><a href="?layer=10">10 &ndash; Improved chat participants updates</a></li><li><a href="?layer=11">11 &ndash; Improved secret chats</a></li><li><a href="?layer=12">12 &ndash; New dynamic support</a></li><li><a href="?layer=13">13 &ndash; Audio, video MIME; contacts import retry; new secret actions</a></li><li><a href="?layer=14">14 &ndash; Notify settings sync, blacklist sync</a></li><li><a href="?layer=15">15 &ndash; Modified getHistory offset behaviour</a></li><li><a href="?layer=16">16 &ndash; Split sendCode into 2 parts</a></li><li><a href="?layer=17">17 &ndash; Added custom typing, introduced message flags</a></li><li><a href="?layer=18">18 &ndash; Added usernames</a></li><li><a href="?layer=23">23 &ndash; Stickers for secret chats</a></li><li><a href="?layer=105">105 &ndash; Scheduled messages, Cloud themes</a></li><li><a href="?layer=108">108 &ndash; Login with QR code</a></li><li><a href="?layer=109">109 &ndash; Polls v2</a></li><li><a href="?layer=110">110 &ndash; People Nearby 2.0, Bank card entity</a></li><li><a href="?layer=111">111 &ndash; Folders, Broadcast Stats</a></li><li><a href="?layer=112">112 &ndash; Old featured stickers, generic dice, poll timer, poll solution</a></li><li><a href="?layer=113">113 &ndash; PSA</a></li><li><a href="?layer=114">114 &ndash; Video thumbs for GIFs</a></li><li><a href="?layer=115">115 &ndash; Peek Channel Invite</a></li><li><a href="?layer=116">116 &ndash; Group Stats, Profile Videos</a></li><li><a href="?layer=117">117 &ndash; WebRTC Phone Calls</a></li><li><a href="?layer=118">118 &ndash; Callback with 2FA, Countries list</a></li><li><a href="?layer=119">119 &ndash; Comments in channels, Threads, Anonymous Admins</a></li><li><a href="?layer=120">120 &ndash; Multipins, Message Stats, GeoLive v2</a></li><li><a href="?layer=121">121 &ndash; SVG-based Outlines for Stickers</a></li><li><a href="?layer=122">122 &ndash; Voice Chats</a></li><li><a href="?layer=123">123 &ndash; Voice Chat improvements</a></li><li><a href="?layer=124">124 &ndash; Expiring Invite links</a></li><li><a href="?layer=125">125 &ndash; Voice Chats in Broadcasts</a></li><li><a href="?layer=126">126 &ndash; Ban channels in channels</a></li><li><a href="?layer=127">127 &ndash; Payments in channels</a></li><li><a href="?layer=128">128 &ndash; Microthumbs for User/Chat profile photos</a></li><li><a href="?layer=129">129 &ndash; Video Chats</a></li><li><a href="?layer=130">130 &ndash; Custom placeholder for bot reply keyboards</a></li><li><a href="?layer=131">131 &ndash; Reset 2FA Password after a week</a></li><li><a href="?layer=132">132 &ndash; Chat themes</a></li><li><a href="?layer=133">133 &ndash; 64-bit IDs for User/Chat</a></li><li><a href="?layer=134">134 &ndash; Chat Requests, Shared Media Calendar</a></li><li><a href="?layer=135">135 &ndash; Send Message As a Channel</a></li><li><a href="?layer=136">136 &ndash; Reactions</a></li><li><a href="?layer=137">137 &ndash; Translations</a></li><li><a href="?layer=138">138 &ndash; GIF Sticker Packs</a></li><li><a href="?layer=139"><strong>139 &ndash; RTMP streaming</strong></a></li>
<li class="divider"></li>
<li><a href="/api/layers">More...</a></li>
</ul>
</li>
</ul>
</div>
<pre class="page_scheme"><code><a href="/constructor/boolFalse" >boolFalse</a>#bc799737 = <a href="/type/Bool" >Bool</a>;
<a href="/constructor/boolTrue" >boolTrue</a>#997275b5 = <a href="/type/Bool" >Bool</a>;
---functions---
<a href="/method/auth.bindTempAuthKey" class="current_page_link" >auth.bindTempAuthKey</a>#cdd42a05 perm_auth_key_id:<a href="/type/long" >long</a> nonce:<a href="/type/long" >long</a> expires_at:<a href="/type/int" >int</a> encrypted_message:<a href="/type/bytes" >bytes</a> = <a href="/type/Bool" >Bool</a>;</code></pre></p>
<h3><a class="anchor" href="#parameters" id="parameters" name="parameters"><i class="anchor-icon"></i></a>Parameters</h3>
<table class="table">
<thead>
<tr>
<th>Name</th>
<th style="text-align: center;">Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>perm_auth_key_id</strong></td>
<td style="text-align: center;"><a href="/type/long">long</a></td>
<td>Permanent auth_key_id to bind to</td>
</tr>
<tr>
<td><strong>nonce</strong></td>
<td style="text-align: center;"><a href="/type/long">long</a></td>
<td>Random long from <a href="#binding-message-contents">Binding message contents</a></td>
</tr>
<tr>
<td><strong>expires_at</strong></td>
<td style="text-align: center;"><a href="/type/int">int</a></td>
<td>Unix timestamp to invalidate temporary key, see <a href="#binding-message-contents">Binding message contents</a></td>
</tr>
<tr>
<td><strong>encrypted_message</strong></td>
<td style="text-align: center;"><a href="/type/bytes">bytes</a></td>
<td>See <a href="#generating-encrypted-message">Generating encrypted_message</a></td>
</tr>
</tbody>
</table>
<h3><a class="anchor" href="#result" id="result" name="result"><i class="anchor-icon"></i></a>Result</h3>
<p><a href="/type/Bool">Bool</a></p>
<h3><a class="anchor" href="#possible-errors" id="possible-errors" name="possible-errors"><i class="anchor-icon"></i></a>Possible errors</h3>
<table class="table">
<thead>
<tr>
<th>Code</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>400</td>
<td>ENCRYPTED_MESSAGE_INVALID</td>
<td>Encrypted message invalid.</td>
</tr>
<tr>
<td>400</td>
<td>TEMP_AUTH_KEY_ALREADY_BOUND</td>
<td>The passed temporary key is already bound to another <strong>perm_auth_key_id</strong>.</td>
</tr>
<tr>
<td>400</td>
<td>TEMP_AUTH_KEY_EMPTY</td>
<td>No temporary auth key provided.</td>
</tr>
</tbody>
</table>
<h3><a class="anchor" href="#generating-encrypted-message" id="generating-encrypted-message" name="generating-encrypted-message"><i class="anchor-icon"></i></a>Generating encrypted_message</h3>
<p>The client begins by creating a special binding message:</p>
<h3><a class="anchor" href="#binding-message-contents" id="binding-message-contents" name="binding-message-contents"><i class="anchor-icon"></i></a>Binding message contents</h3>
<pre><code>bind_auth_key_inner#75a3f765 nonce:long temp_auth_key_id:long perm_auth_key_id:long temp_session_id:long expires_at:int = BindAuthKeyInner;</code></pre>
<table class="table">
<thead>
<tr>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>nonce</strong></td>
<td><a href="/type/long">long</a></td>
<td>Random long</td>
</tr>
<tr>
<td><strong>temp_auth_key_id</strong></td>
<td><a href="/type/long">long</a></td>
<td>Temporary auth_key_id</td>
</tr>
<tr>
<td><strong>perm_auth_key_id</strong></td>
<td><a href="/type/long">long</a></td>
<td>Permanent auth_key_id to bind to</td>
</tr>
<tr>
<td><strong>temp_session_id</strong></td>
<td><a href="/type/long">long</a></td>
<td>Session id, which will be used to invoke <strong>auth.bindTempAuthKey</strong> method</td>
</tr>
<tr>
<td><strong>expires_at</strong></td>
<td><a href="/type/int">int</a></td>
<td>Unix timestamp to invalidate temporary key</td>
</tr>
</tbody>
</table>
<h3><a class="anchor" href="#encrypting-the-binding-message" id="encrypting-the-binding-message" name="encrypting-the-binding-message"><i class="anchor-icon"></i></a>Encrypting the binding message</h3>
<p>This binding message is encrypted in <a href="/mtproto/description">the usual way, but with MTProto v1</a> using the <code>perm_auth_key</code>. In other words, one has to prepend <code>random:int128</code> (it replaces the customary <code>session_id:long</code> and <code>salt:long</code> that are irrelevant in this case), then append the same <code>msg_id</code> that will be used for the request, a <code>seqno</code> equal to zero, and the correct <code>msg_len</code> (40 bytes in this case); after that, one computes the <code>msg_key:int128</code> as SHA1 of the resulting string, appends padding necessary for a 16-byte alignment, encrypts the resulting string using the key derived from <code>perm_auth_key</code> and <code>msg_key</code>, and prepends <code>perm_auth_key_id</code> and <code>msg_key</code> to the encrypted data as usual.</p>
<h3><a class="anchor" href="#binding" id="binding" name="binding"><i class="anchor-icon"></i></a>Binding</h3>
<p>Once <strong>encrypted_message</strong> is ready, an <strong>auth.bindTempAuthKey</strong> request is sent to the server using <code>temp_auth_key</code> and <code>temp_session_id</code>. Don't forget to <a href="/api/invoking#saving-client-info">rewrite client info</a> using <a href="/method/initConnection">initConnection</a> when the binding is completed.</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>
<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="#perfect-forward-secrecy" id="perfect-forward-secrecy" name="perfect-forward-secrecy"><i class="anchor-icon"></i></a><a href="/api/pfs">Perfect Forward Secrecy</a></h4>
<p>Binding temporary authorization key to permanent ones.</p>
<h4><a class="anchor" href="#long" id="long" name="long"><i class="anchor-icon"></i></a><a href="/type/long">long</a></h4>
<p>A basic bare type, elements of which correspond to two-element sequences, representing 64-bit signed numbers (little-endian).</p>
<p><a href="/mtproto/serialize">More on basic types »</a></p>
<h4><a class="anchor" href="#int" id="int" name="int"><i class="anchor-icon"></i></a><a href="/type/int">int</a></h4>
<p>A basic bare type, the values of which correspond to single-element sequences, i.e. numbers from -2^31 to 2^31-1 which in this case represent themselves.</p>
<p><a href="/mtproto/serialize">More on basic types »</a></p>
<h4><a class="anchor" href="#mobile-protocol-detailed-description" id="mobile-protocol-detailed-description" name="mobile-protocol-detailed-description"><i class="anchor-icon"></i></a><a href="/mtproto/description">Mobile Protocol: Detailed Description</a></h4>
<h4><a class="anchor" href="#calling-api-methods" id="calling-api-methods" name="calling-api-methods"><i class="anchor-icon"></i></a><a href="/api/invoking">Calling API Methods</a></h4>
<p>Additional options for calling methods.</p>
<h4><a class="anchor" href="#initconnection" id="initconnection" name="initconnection"><i class="anchor-icon"></i></a><a href="/method/initConnection">initConnection</a></h4>
<p>Initialize connection</p></div>
</div>
</div>
</div>
<div class="footer_wrap">
<div class="footer_columns_wrap footer_desktop">
<div class="footer_column footer_column_telegram">
<h5>Telegram</h5>
<div class="footer_telegram_description"></div>
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.
</div>
<div class="footer_column">
<h5><a href="//telegram.org/faq">About</a></h5>
<ul>
<li><a href="//telegram.org/faq">FAQ</a></li>
<li><a href="//telegram.org/blog">Blog</a></li>
<li><a href="//telegram.org/jobs">Jobs</a></li>
</ul>
</div>
<div class="footer_column">
<h5><a href="//telegram.org/apps#mobile-apps">Mobile Apps</a></h5>
<ul>
<li><a href="//telegram.org/dl/ios">iPhone/iPad</a></li>
<li><a href="//telegram.org/dl/android">Android</a></li>
<li><a href="//telegram.org/dl/wp">Windows Phone</a></li>
</ul>
</div>
<div class="footer_column">
<h5><a href="//telegram.org/apps#desktop-apps">Desktop Apps</a></h5>
<ul>
<li><a href="//desktop.telegram.org/">PC/Mac/Linux</a></li>
<li><a href="//macos.telegram.org/">macOS</a></li>
<li><a href="//telegram.org/dl/web">Web-browser</a></li>
</ul>
</div>
<div class="footer_column footer_column_platform">
<h5><a href="//core.telegram.org/">Platform</a></h5>
<ul>
<li><a href="//core.telegram.org/api">API</a></li>
<li><a href="//translations.telegram.org/">Translations</a></li>
<li><a href="//instantview.telegram.org/">Instant View</a></li>
</ul>
</div>
</div>
<div class="footer_columns_wrap footer_mobile">
<div class="footer_column">
<h5><a href="//telegram.org/faq">About</a></h5>
</div>
<div class="footer_column">
<h5><a href="//telegram.org/blog">Blog</a></h5>
</div>
<div class="footer_column">
<h5><a href="//telegram.org/apps">Apps</a></h5>
</div>
<div class="footer_column">
<h5><a href="//core.telegram.org/">Platform</a></h5>
</div>
<div class="footer_column">
<h5><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)">Twitter</a></h5>
</div>
</div>
</div>
</div>
<script src="/js/main.js?43"></script>
<script>backToTopInit("Go up");
removePreloadInit();
</script>
</body>
</html>