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;