- Convert tuimail repo to Cargo workspace with tuimail and proton-bridge members - Add proton-bridge binary crate with config, SRP 6a, and auth modules - Implement ProtonMail SRP 6a exactly matching go-srp: - Little-endian bigints throughout - expandHash = SHA512(data||0..3) producing 256 bytes - k, u, M1, M2 all via expandHash with 256-byte normalised inputs - Password hashing v3/v4: bcrypt($2y$, salt+proton) + expandHash(output||N) - Authenticate against Proton API (auth/info → auth/v4), verify server proof - Persist session (UID, access/refresh tokens) to session.json - Add bridge.toml and session.json to .gitignore (contain credentials/tokens) - Add PROTON.md with full build plan for the mini-bridge Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
21 lines
No EOL
624 B
Rust
21 lines
No EOL
624 B
Rust
mod auth;
|
|
mod config;
|
|
mod srp;
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
let config = match config::Config::load() {
|
|
Ok(c) => c,
|
|
Err(e) => { eprintln!("Failed to load bridge.toml: {}", e); std::process::exit(1); }
|
|
};
|
|
|
|
let client = match auth::build_client() {
|
|
Ok(c) => c,
|
|
Err(e) => { eprintln!("Failed to build HTTP client: {}", e); std::process::exit(1); }
|
|
};
|
|
|
|
match auth::authenticate(&client, &config.proton).await {
|
|
Ok(session) => println!("Session UID: {}", session.uid),
|
|
Err(e) => { eprintln!("Authentication failed: {}", e); std::process::exit(1); }
|
|
}
|
|
} |