hermes-tdata 0.1.0

Pure Rust parser for Telegram Desktop's tdata storage format. Decrypts local storage and extracts auth keys without Qt/C++ dependencies.
Documentation
//! Pure Rust parser for Telegram Desktop `tdata` folders.
//! Converts tdata to grammers sessions.
//!
//! Low-level binary parser requiring direct byte indexing,
//! arithmetic for offsets, and integer type conversions.
#![allow(
    clippy::indexing_slicing,
    clippy::arithmetic_side_effects,
    clippy::as_conversions,
    clippy::cast_possible_truncation,
    clippy::cast_possible_wrap,
    clippy::cast_sign_loss,
    clippy::default_numeric_fallback,
    clippy::little_endian_bytes,
    clippy::missing_errors_doc,
    clippy::missing_asserts_for_indexing,
    clippy::absolute_paths,
    clippy::error_impl_error,
    clippy::items_after_statements,
    clippy::string_slice,
    clippy::pattern_type_mismatch,
    clippy::return_self_not_must_use,
    clippy::let_underscore_untyped,
    clippy::doc_markdown,
    clippy::map_err_ignore,
    clippy::integer_division,
    unreachable_pub,
    reason = "low-level binary parser requires these patterns"
)]
#![cfg_attr(
    test,
    allow(
        unused_crate_dependencies,
        reason = "dev-dependencies are used by example binaries, not lib tests"
    )
)]
//!
//! ## Features
//!
//! - Parse `tdata` folders from Telegram Desktop
//! - Extract authorization keys (`auth_key`) and datacenter IDs
//! - Convert to grammers session format
//! - Support for password-protected tdata (Local Passcode)
//! - Zero Python dependencies
//!
//! ## Example
//!
//! ```rust,no_run
//! use hermes_tdata::TDesktop;
//!
//! fn main() -> Result<(), hermes_tdata::Error> {
//!     // Load tdata from default location
//!     let tdesktop = TDesktop::from_path("/path/to/tdata")?;
//!     
//!     // Get the main account's session
//!     if let Some(account) = tdesktop.main_account() {
//!         let session = account.to_grammers_session()?;
//!         println!("DC ID: {}", account.dc_id());
//!     }
//!     
//!     Ok(())
//! }
//! ```

mod account;
mod error;
mod storage;
mod tdesktop;

/// Cryptographic operations for tdata (PBKDF2, AES-IGE, checksums)
pub mod crypto;

/// QDataStream parser for Qt binary serialization format
pub mod qdatastream;

pub use account::Account;
pub use crypto::{AuthKey, LOCAL_ENCRYPT_SALT_SIZE};
pub use error::{Error, Result};
pub use qdatastream::{QDataStream, QT_VERSION_5_1};
pub use tdesktop::{TDesktop, TDesktopBuilder};

// serde is an optional dependency re-exported for downstream consumers
#[cfg(feature = "serde")]
use serde as _;

/// Auth key size in bytes (256 bytes = 2048 bits)
pub const AUTH_KEY_SIZE: usize = 256;

/// Default key file name
pub const DEFAULT_KEY_FILE: &str = "data";

/// Maximum number of accounts supported by Telegram Desktop
pub const MAX_ACCOUNTS: usize = 3;