# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## Project Overview This is a Rust implementation of the Cryptopal challenges - a collection of cryptography exercises. The codebase follows a workspace structure with individual problem solutions and shared utilities. ## Workspace Structure - **Root workspace**: Defined in `Cargo.toml` with `edition = "2024"` - **Individual problems**: Located in `problems/p1/`, `problems/p2/`, etc. Each has its own `Cargo.toml` and `src/main.rs` - **Common utilities**: Located in `common/` crate with shared cryptographic functions like `is_valid_english()` and `xor_with_key()` - **Documentation**: `cryptopal_book/` contains mdBook documentation for each challenge ## Key Commands ### Building and Running - `cargo build` - Build the entire workspace - `cargo run -p p1` - Run a specific problem (e.g., problem 1) - `cargo build -p p1` - Build a specific problem - `cargo test` - Run tests across the workspace - `cargo check` - Quick syntax check without full compilation ### Documentation - `mdbook build cryptopal_book/` - Build the challenge documentation - `mdbook serve cryptopal_book/` - Serve documentation locally ## Architecture Notes - Each problem is isolated in its own binary crate under `problems/` - Common cryptographic utilities are shared via the `common` crate - Problems use dependencies like `hex`, `base64`, and `anyhow` for encoding/error handling - Code includes Chinese comments for educational purposes - The `common` crate provides utilities for English text validation and XOR operations ## Dependencies Pattern Individual problems typically use: - `hex` for hexadecimal encoding/decoding - `base64` for Base64 operations - `anyhow` for error handling (via common crate) - Local `common` crate for shared utilities ## Development Notes - Each challenge solution should be self-contained in its respective `problems/pN/` directory - Use the `common` crate for shared cryptographic functions - Follow the existing pattern of having a simple `main.rs` that demonstrates the solution