Files
cipher_master/SoT.md

261 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ᛏ Cipher Master Engine — Technical & Operational Context Document
This document serves as the single source of truth for **Cipher Master Engine**. It is designed to provide complete context to human developers, maintainers, and LLMs/AI assistants. It details the product requirements, system architecture, file structure, technology stack, cipher implementations, prompt engineering strategy, and software release procedures.
---
## 1. Executive Summary & Product Specification
* **Project Name**: Cipher Master Engine
* **Repository**: `https://github.com/ReVax-2007/cipher_master.git`
* **Target Platforms**: macOS (x86_64 / ARM64 `.dmg`) & Windows (x86_64 `.exe` / `.msi`)
* **Primary Objective**: Provide an offline-first desktop application that generates cryptanalytic challenges, structured hints, and solution keys. Outputs are automatically rendered and written to plain-text files on the user's Desktop.
* **License**: **CC BY-NC 4.0** (Creative Commons Attribution-NonCommercial 4.0 International). Commercial usage, reselling, or bundling into paid software is strictly prohibited.
---
## 2. Technology Stack & Dependencies
### Desktop Framework & Engine
* **Tauri v2 (`@tauri-apps/cli` v2)**: Native OS bindings, windowing, and IPC bridge. Chosen for its small memory footprint, security boundaries, and lightweight native builds compared to Electron.
* **Rust (2021 Edition / 1.75+)**: Backend logic, cipher encryption algorithms, file system IO, and HTTP client integration.
### Frontend
* **HTML5 / CSS3 / JavaScript (ES6+)**: Plain, lightweight web interface located in the decoupled `./public` asset directory. Communicates with Rust strictly via Tauri IPC (`window.__TAURI__.core.invoke`).
### Cargo Dependencies (`src-tauri/Cargo.toml`)
* `tauri`: Core framework features with `protocol-asset` and window controls.
* `serde` / `serde_json`: High-performance JSON serialization/deserialization for Rust-to-JS IPC payloads.
* `rand`: Pseudo-random number generation for cipher key generation, rotational offsets, and matrix shuffling.
* `ureq`: Synchronous, lightweight HTTP client used to query local LLM REST endpoints without pulling in heavy asynchronous runtimes.
### External Integrations
* **Ollama (Optional)**: Connects via local HTTP REST API at `http://localhost:11434/api/generate` requesting the `llama3.2:1b` model.
* **Built-in Fallback**: Internal algorithmic phrase generator (`fallback_quote`) that operates when Ollama is unavailable, offline, or uninstalled.
---
## 3. Directory & File Architecture
```text
cipher_master/
├── .github/
│ └── workflows/
│ └── release.yml # GitHub Actions CI/CD pipeline (macOS + Windows)
├── public/
│ └── index.html # Isolated frontend web assets (Tauri frontendDist)
├── src-tauri/
│ ├── Cargo.toml # Rust dependencies and binary metadata
│ ├── tauri.conf.json # Tauri app configuration, bundle ID, window specs
│ ├── icons/ # Multi-resolution platform icons (.icns, .ico, PNGs)
│ └── src/
│ ├── lib.rs # Core cipher logic, file IO, IPC commands & AI client
│ └── main.rs # Execution entry point
├── app-icon.png # Master 1024x1024 high-resolution source icon
├── SUGGESTED_FEATURES.md # Feature roadmap
├── SUGGESTED_INTEGRATIONS.md # Third-party service integration roadmap
├── SUGGESTED_UPGRADES.md # Infrastructure and architectural upgrade roadmap
├── LICENSE # CC BY-NC 4.0 Legal terms
└── README.md # Primary repository documentation
```
---
## 4. Key Configurations (`tauri.conf.json`)
To compile valid release installers, the bundle identifier must avoid default placeholders (`com.tauri.dev`).
```json
{
"$schema": "[https://schema.tauri.app/config/2](https://schema.tauri.app/config/2)",
"productName": "Cipher Master",
"version": "1.0.0",
"identifier": "com.xvoet.ciphermaster",
"build": {
"frontendDist": "../public"
},
"app": {
"windows": [
{
"title": "Cipher Master",
"width": 800,
"height": 600,
"resizable": true,
"fullscreen": false
}
]
},
"bundle": {
"active": true,
"targets": "all",
"icon": [
"icons/32x32.png",
"icons/128x128.png",
"icons/128x128@2x.png",
"icons/icon.icns",
"icons/icon.ico"
]
}
}
```
---
## 5. Core Engine Implementations & Methodologies
### A. Supported Cipher Algorithms (`src-tauri/src/lib.rs`)
1. **Elder Futhark Runes**: Maps standard Latin characters ($A..Z$) to Unicode Elder Futhark runic characters ($\text{ᚠ, ᚢ, ᚦ, ᚨ, ᚱ, ᚲ, \dots}$).
2. **Caesar Shift**: Rotates alphabetic index by a pseudo-random integer $k \in [1, 25]$:
$$E(x) = (x + k) \pmod{26}$$
3. **Atbash Cipher**: Reverses the alphabet index:
$$E(x) = (25 - x) \pmod{26}$$
4. **Monoalphabetic Substitution**: Generates a shuffled 26-character alphabet array via `rand::seq::SliceRandom` and maps $A..Z$ directly to the permutation.
5. **Vigenère Cipher**: Accepts a multi-character key phrase $K$; shifts character $i$ using offset $K[i \pmod{|K|}]$.
6. **Rail Fence (Zig-Zag)**: Constructs a $W \times H$ rail matrix based on $N$ rails, routes plaintext in a zig-zag movement, and reads row-by-row.
7. **Affine Cipher**: Multiplies and shifts characters using key pair $(a, b)$ where $\gcd(a, 26) = 1$:
$$E(x) = (a \cdot x + b) \pmod{26}$$
8. **A1Z26 Numeric**: Converts each letter to its 1-based numerical index separated by hyphens (e.g., $A=1, B=2, Z=26$).
9. **Fill in the Blank**: Builds a randomized one-to-one mapping from every letter in $A..Z$ to a unique number in $01..26$. The challenge displays those numbers while preserving word boundaries, `cipher_hint.txt` reveals a small set of known letter mappings, and `cipher_solution.txt` stores the complete mapping.
### B. Difficulty Formatting Pipeline
* **Easy**: Maintains original spaces, lower/upper case, and punctuation. Appends detailed vowel count and frequency metrics in `cipher_hint.txt`.
* **Medium**: Converts string to uppercase and strips all spaces and non-alphanumeric characters.
* **Hard**: Uppercases, strips non-alphanumeric characters, and formats the output into uniform 5-character blocks (e.g., `HELL O WORL D` $\rightarrow$ `HELLO WORLD` $\rightarrow$ `HELLO WORLD`).
### C. Desktop Output File Protocol
Upon execution of the `generate_cipher_files` IPC command, the engine resolves the user's local Desktop path (`dirs::desktop_dir` or `dirs-next`) and writes three distinct files:
1. `cipher_challenge.txt`: Contains difficulty level, cipher type name, and formatted ciphertext.
2. `cipher_hint.txt`: Contains character length, structural analysis, letter distribution metrics, and riddle clues.
3. `cipher_solution.txt`: Contains original plaintext, decryption parameters/keys, and step-by-step decoding notes.
---
## 6. AI Prompting Strategy & Local Fallback
### Ollama Prompt Strategy
When an AI quote is requested, `ureq::post` issues a JSON payload to `http://localhost:11434/api/generate`:
```json
{
"model": "llama3.2:1b",
"prompt": "Generate a single inspirational, philosophical, or historical quote suitable for a cryptographic puzzle. Output ONLY the quote text itself. Do not include quotes, commentary, or attribution.",
"stream": false
}
```
### Algorithmic Fallback Engine
If Ollama fails to respond within the socket timeout or is offline, `fallback_quote(length_choice)` executes deterministically:
* Uses randomized array selection across pre-defined arrays (`TOPICS`, `ACTIONS`, `QUALIFIERS`).
* Concatenates items into structured uppercase sentences (e.g., `"KNOWLEDGE FAVORED THE BRAVE MINDS AND PROTECTED LIBERTY WITH SECRETS"`).
---
## 7. Development, Replicating & Debugging
### Running Dev Mode
To run and inspect IPC events locally on macOS:
```bash
cargo tauri dev
```
### Manual Quote Modifications
If you want to alter or add static quotes without Ollama, update `fallback_quote` in `src-tauri/src/lib.rs`:
```rust
fn fallback_quote(_length_choice: usize) -> String {
"CUSTOM PASSTHROUGH TEXT GOES HERE".to_string()
}
```
### Isolating IPC Mismatches
When calling Rust commands from JS, parameter names must match verbatim in camelCase or snake_case as declared:
* **Rust**: `pub fn generate_cipher_files(cipher_type: String, difficulty: String)`
* **JS**: `invoke('generate_cipher_files', { cipherType: 'caesar', difficulty: 'easy' })`
---
## 8. CI/CD & Maintenance Rules
### Branching Policy
Direct pushes to `master` are strictly disabled in project guidelines. All modifications must follow:
1. Feature branch creation (`git checkout -b feature/name`).
2. Local validation (`cargo tauri dev`).
3. PR submission and merge into `master`.
### Triggering Production Releases (Maintainers Only)
Releases are built via GitHub Actions (`.github/workflows/release.yml`) targeting `macos-latest`, `windows-latest` and `ubuntu-latest`.
```bash
# Tag master commit
git tag v1.0.x
git push origin v1.0.x
```
GitHub Actions compiles `.dmg`, `.exe`, and `.msi` installers and attaches them directly as release binaries to the corresponding release draft.
## 9. Foundation & Construction Prompts
This section documents the foundational prompts and guidelines used to construct the Cipher Master Engine architecture, backend algorithms, and release workflows.
### A. Initial Architectural Prompt (Foundation & Tech Stack Setup)
> **Goal:** Establish a lightweight, cross-platform Tauri v2 desktop application with Rust backend logic and isolated frontend assets.
>
> **Prompt:**
> "Act as a Senior Rust & Desktop Engineer. I want to build a desktop app named 'Cipher Master' using Tauri v2 and Rust.
> Key Requirements:
> 1. Separate backend logic into Rust (`src-tauri/src/lib.rs`) and keep web assets isolated in a `./public` folder.
> 2. Implement IPC communication between JavaScript (`window.__TAURI__.core.invoke`) and Rust commands.
> 3. Implement 8 cipher engines: Elder Futhark Runes, Caesar Shift, Atbash, Monoalphabetic Substitution, Vigenère, Rail Fence, Affine Cipher, and A1Z26.
> 4. Support three difficulty levels (Easy, Medium, Hard) that modify punctuation, casing, and 5-character block grouping.
> 5. Output three plain-text files directly to the user's Desktop upon execution: `cipher_challenge.txt`, `cipher_hint.txt`, and `cipher_solution.txt`."
### B. Local AI Integration & Fallback Prompt
> **Goal:** Connect to local LLM instances while maintaining robust offline fallback functionality.
>
> **Prompt:**
> "Integrate a local Ollama API client using the synchronous `ureq` crate in Rust.
> Requirements:
> 1. Query `http://localhost:11434/api/generate` with model `llama3.2:1b` to pull a single short philosophical/inspirational quote.
> 2. Implement a non-blocking timeout strategy. If Ollama is offline or takes too long, seamlessly fall back to an internal algorithmic quote generator function (`fallback_quote`) without crashing or showing an error in the GUI."
### C. Bundle Identifier & Asset Isolation Debugging Prompts
> **Goal:** Resolve Tauri production bundler errors regarding reserved identifiers and asset directory overlapping.
>
> **Prompt:**
> "Fix the Tauri build errors:
> 1. `Error You must change the bundle identifier`: Update `tauri.conf.json` with a unique reverse-DNS bundle identifier (`com.xvoet.ciphermaster`).
> 2. `Error The configured frontendDist includes the src-tauri folder`: Separate `index.html` into a dedicated `public/` directory and update `frontendDist` in `tauri.conf.json` to point to `../public`."
### D. CI/CD Release Pipeline Prompt
> **Goal:** Automate cross-platform compilation for macOS and Windows using GitHub Actions.
>
> **Prompt:**
> "Create a GitHub Actions release workflow `.github/workflows/release.yml` triggered on version tags (`v*`).
> Requirements:
> 1. Use a matrix build targeting `macos-latest` and `windows-latest`.
> 2. Use `tauri-apps/tauri-action@v0` to build `.dmg`, `.exe`, and `.msi` installers.
> 3. Ensure source code tarballs/zips are not uploaded as standalone release binaries, attaching only compiled production installers to the GitHub Release draft."