diff --git a/README.md b/README.md index b310f9e..a4ac753 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,22 @@ ## Co to je -Mini Go/HTMX aplikace pro šifrování zpráv cizím veřejným klíčem. +Nástroj v Go pro asymetrické šifrování zpráv cizím veřejným klíčem. -* Při startu vygeneruje nebo načte RSA identitu (2048 bitů). -* Umožní sdílet veřejný klíč (`public.pem`) a self-signed cert (`identity.crt`). -* Šifruje hybridně: **RSA-OAEP (SHA-256) + AES-256-GCM**. -* Rozhraní přes **HTMX**, moderní responzivní layout (2 sloupce na desktopu, 1 sloupec na mobilu). -* Všude jsou tlačítka **Copy** a **Clear** pro snadnou práci s texty. +Má dvě rozhraní: + +1. Web (HTMX) – jednoduché formuláře (encrypt / decrypt) +2. Desktop (Fyne v2) – 3 záložky: Identita, Šifrování, Dešifrování (dark UI) + +Vlastnosti: + +* Při startu vygeneruje nebo načte RSA identitu (2048 bitů) +* Sdílí veřejný klíč (`public.pem`) a self‑signed cert (`identity.crt`) +* Hybridní šifra: **RSA-OAEP (SHA-256) + AES-256-GCM** +* JSON payload: `{ek,n,ct}` (base64 komponenty) +* V GUI nad každým polem sada tlačítek (Paste, Clear, Encrypt/Decrypt, Copy) +* Output pole jsou read‑only +* Pamatuje poslední záložku a velikost okna --- @@ -19,27 +28,18 @@ Mini Go/HTMX aplikace pro šifrování zpráv cizím veřejným klíčem. --- -## Rychlý start +## Rychlý start (gui) ```bash -# spustí server -go run . - -# otevři v prohlížeči -http://localhost:8080/ -```text +go run . gui +``` Na prvním startu se vytvoří: -``` -identity_key.pem # RSA private key (PKCS#1) -public.pem # veřejný klíč PEM (PKIX) -identity.crt # self-signed cert (vizitka pro sdílení) -``` ```text identity_key.pem # RSA private key (PKCS#1) public.pem # veřejný klíč PEM (PKIX) -identity.crt # self-signed cert (vizitka pro sdílení) +identity.crt # self-signed cert (vizitka) ``` --- @@ -58,28 +58,29 @@ REGEN_KEYS=1 go run . --- -## Jak to používat (UI) +## Web UI použití -1. Otevři `http://localhost:8080/`. -2. V sekci **Můj veřejný klíč** stáhni/kopíruj `public.pem` nebo `identity.crt` a pošli je kontaktům. -3. V sekci **Šifrovat pro cizí klíč**: +```bash +# přes flag +go run . web +``` - * napiš zprávu, - * vlož **cizí** public key nebo cert (PEM blok), - * klikni **Encrypt**. - * Výsledek (**Zašifrovaný payload**) se zobrazí hned pod formulářem jako JSON: - ```json - { - "ek": "base64(RSA-OAEP(aesKey))", - "n": "base64(nonce)", - ```text - "ct": "base64(aes-gcm-ciphertext)" - } - ``` - * tlačítkem **Copy** zkopíruješ, **Clear** vymaže obsah. - ```text -4. Příjemce vloží payload do sekce **Dešifrovat** a klikne **Decrypt** → objeví se plaintext. +1. Otevři `http://localhost:8080/` +2. Zkopíruj / stáhni svůj veřejný klíč nebo cert +3. Do Encrypt formuláře vlož cizí public key/cert + zprávu → Encrypt +4. JSON payload odešli příjemci +5. Příjemce vloží payload do Decrypt → plaintext + +Formát payloadu: + +```json +{ + "ek": "base64(RSA-OAEP(aesKey))", + "n": "base64(nonce)", + "ct": "base64(aes-gcm-ciphertext)" +} +``` --- @@ -99,17 +100,18 @@ REGEN_KEYS=1 go run . --- -## Struktura projektu +## Struktura projektu (zkráceně) ```text . -├─ main.go -├─ templates/ -│ ├─ index.html # UI s Copy/Clear tlačítky -│ ├─ encrypt.html # výstup šifrování -│ └─ decrypt.html # výstup dešifrování -└─ static/ - └─ style.css # responzivní layout (1 sloupec mobile, 2 desktop) +├─ main.go # cobra entry +├─ cmd.go # CLI příkazy (gui, web) +├─ ui.go # Fyne komponenty +├─ fyne_ui.go # init okna + prefs +├─ server.go # HTTP handlery +├─ lib/crypto.go # šifrovací logika +├─ templates/ # HTMX šablony +└─ static/ # CSS ``` --- @@ -133,28 +135,24 @@ REGEN_KEYS=1 go run . ## Fyne GUI režim -Projekt teď obsahuje i desktop GUI (Fyne v2) se třemi záložkami: - -1. Identita – zobrazení / kopírování `public.pem` a `identity.crt`. -2. Šifrování – vlož cizí veřejný klíč/cert, napiš zprávu, klikni Encrypt. -3. Dešifrování – vlož JSON payload, klikni Decrypt. - -Funkce navíc: - -* Tlačítko 🌗 Motiv – přepíná jednoduchý light/dark vzhled (uložen do preferencí). -* Posledně vybraný tab, velikost okna i motiv se automaticky obnoví při dalším spuštění. -* Výstupní pole jsou read-only, aby se předešlo nechtěné editaci. - -Spuštění GUI: +Spuštění desktopu: ```bash go run . gui ``` -HTTP server zůstává: +Záložky: + +1. Identita – kopírování `public.pem` / `identity.crt` +2. Šifrování – peer key, zpráva, tlačítka: Paste, Clear, Encrypt, Copy +3. Dešifrování – payload: Paste+Decrypt, Clear (čistí i výsledek), Copy + +GUI je trvale v dark stylu. Pamatuje poslední tab a velikost okna. + +HTTP režim zůstává: ```bash -go run . http +go run . web ``` ---