ferogram-mtproto
MTProto 2.0 session management, DH key exchange, and message framing for Rust.
The MTProto session layer. Handles everything from raw bytes to decrypted, sequenced messages. ferogram sits on top of this; most users don't need to depend on it directly.
For installation instructions see the ferogram README.
What it handles
- 3-step DH key exchange (
req_pq_multi→req_DH_params→set_client_DH_params) - Encrypted sessions: AES-IGE pack/unpack, msg_key derivation, salt management
- Message framing: salt, session_id, message_id, sequence numbers
msg_containerandgzip_packedunwrapping- Error recovery:
bad_msg_notification,bad_server_salt,msg_resend_req - Acknowledgements via
MsgsAck - Temporary key binding for PFS (
bind_temp_keymodule)
Core Types
EncryptedSession
Manages the live MTProto session after key exchange.
use EncryptedSession;
let session = new;
let wire_bytes = session.pack?;
let wire_bytes = session.pack_serializable?;
let msg = session.unpack?;
3-Step DH Handshake
use authentication as auth;
let = step1?;
// send req1, receive res_pq
let = step2?;
// send req2, receive server_DH_params
let = step3?;
// send req3, receive dh_answer
let done = finish?;
// done.auth_key [u8; 256]
// done.first_salt i64
// done.time_offset i32
Message
bind_temp_key
Implements PFS temporary key binding.
use ;
let wire = serialize_bind_temp_auth_key?;
Stack position
ferogram
└ ferogram-mtproto <-- here
├ ferogram-tl-types (tl-mtproto feature)
└ ferogram-crypto
License
MIT or Apache-2.0, at your option. See LICENSE-MIT and LICENSE-APACHE.
Ankit Chaubey - github.com/ankit-chaubey