Skip to main content

hermes_tdata/
lib.rs

1//! Pure Rust parser for Telegram Desktop `tdata` folders.
2//! Converts tdata to grammers sessions.
3//!
4//! Low-level binary parser requiring direct byte indexing,
5//! arithmetic for offsets, and integer type conversions.
6#![allow(
7    clippy::indexing_slicing,
8    clippy::arithmetic_side_effects,
9    clippy::as_conversions,
10    clippy::cast_possible_truncation,
11    clippy::cast_possible_wrap,
12    clippy::cast_sign_loss,
13    clippy::default_numeric_fallback,
14    clippy::little_endian_bytes,
15    clippy::missing_errors_doc,
16    clippy::missing_asserts_for_indexing,
17    clippy::absolute_paths,
18    clippy::error_impl_error,
19    clippy::items_after_statements,
20    clippy::string_slice,
21    clippy::pattern_type_mismatch,
22    clippy::return_self_not_must_use,
23    clippy::let_underscore_untyped,
24    clippy::doc_markdown,
25    clippy::map_err_ignore,
26    clippy::integer_division,
27    unreachable_pub,
28    reason = "low-level binary parser requires these patterns"
29)]
30#![cfg_attr(
31    test,
32    allow(
33        unused_crate_dependencies,
34        reason = "dev-dependencies are used by example binaries, not lib tests"
35    )
36)]
37//!
38//! ## Features
39//!
40//! - Parse `tdata` folders from Telegram Desktop
41//! - Extract authorization keys (`auth_key`) and datacenter IDs
42//! - Convert to grammers session format
43//! - Support for password-protected tdata (Local Passcode)
44//! - Zero Python dependencies
45//!
46//! ## Example
47//!
48//! ```rust,no_run
49//! use hermes_tdata::TDesktop;
50//!
51//! fn main() -> Result<(), hermes_tdata::Error> {
52//!     // Load tdata from default location
53//!     let tdesktop = TDesktop::from_path("/path/to/tdata")?;
54//!     
55//!     // Get the main account's session
56//!     if let Some(account) = tdesktop.main_account() {
57//!         let session = account.to_grammers_session()?;
58//!         println!("DC ID: {}", account.dc_id());
59//!     }
60//!     
61//!     Ok(())
62//! }
63//! ```
64
65mod account;
66mod error;
67mod storage;
68mod tdesktop;
69
70/// Cryptographic operations for tdata (PBKDF2, AES-IGE, checksums)
71pub mod crypto;
72
73/// QDataStream parser for Qt binary serialization format
74pub mod qdatastream;
75
76pub use account::Account;
77pub use crypto::{AuthKey, LOCAL_ENCRYPT_SALT_SIZE};
78pub use error::{Error, Result};
79pub use qdatastream::{QDataStream, QT_VERSION_5_1};
80pub use tdesktop::{TDesktop, TDesktopBuilder};
81
82// serde is an optional dependency re-exported for downstream consumers
83#[cfg(feature = "serde")]
84use serde as _;
85
86/// Auth key size in bytes (256 bytes = 2048 bits)
87pub const AUTH_KEY_SIZE: usize = 256;
88
89/// Default key file name
90pub const DEFAULT_KEY_FILE: &str = "data";
91
92/// Maximum number of accounts supported by Telegram Desktop
93pub const MAX_ACCOUNTS: usize = 3;