feature/ui - zatim ne uplne uhlazena ale celkem pouzitelna appka #1

Merged
luke-20 merged 17 commits from feature/ui into main 2025-09-28 21:05:52 +02:00
Showing only changes of commit 901684763e - Show all commits

114
README.md
View File

@ -2,13 +2,22 @@
## Co to je ## 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ů). Má dvě rozhraní:
* Umožní sdílet veřejný klíč (`public.pem`) a self-signed cert (`identity.crt`).
* Šifruje hybridně: **RSA-OAEP (SHA-256) + AES-256-GCM**. 1. Web (HTMX) jednoduché formuláře (encrypt / decrypt)
* Rozhraní přes **HTMX**, moderní responzivní layout (2 sloupce na desktopu, 1 sloupec na mobilu). 2. Desktop (Fyne v2) 3 záložky: Identita, Šifrování, Dešifrování (dark UI)
* Všude jsou tlačítka **Copy** a **Clear** pro snadnou práci s texty.
Vlastnosti:
* Při startu vygeneruje nebo načte RSA identitu (2048 bitů)
* Sdílí veřejný klíč (`public.pem`) a selfsigned 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 readonly
* 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 ```bash
# spustí server go run . gui
go run . ```
# otevři v prohlížeči
http://localhost:8080/
```text
Na prvním startu se vytvoří: 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 ```text
identity_key.pem # RSA private key (PKCS#1) identity_key.pem # RSA private key (PKCS#1)
public.pem # veřejný klíč PEM (PKIX) 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/`. ```bash
2. V sekci **Můj veřejný klíč** stáhni/kopíruj `public.pem` nebo `identity.crt` a pošli je kontaktům. # přes flag
3. V sekci **Šifrovat pro cizí klíč**: 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 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))", "ek": "base64(RSA-OAEP(aesKey))",
"n": "base64(nonce)", "n": "base64(nonce)",
```text
"ct": "base64(aes-gcm-ciphertext)" "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.
--- ---
@ -99,17 +100,18 @@ REGEN_KEYS=1 go run .
--- ---
## Struktura projektu ## Struktura projektu (zkráceně)
```text ```text
. .
├─ main.go ├─ main.go # cobra entry
├─ templates/ ├─ cmd.go # CLI příkazy (gui, web)
│ ├─ index.html # UI s Copy/Clear tlačítky ├─ ui.go # Fyne komponenty
│ ├─ encrypt.html # výstup šifrování ├─ fyne_ui.go # init okna + prefs
│ └─ decrypt.html # výstup dešifrování ├─ server.go # HTTP handlery
└─ static/ ├─ lib/crypto.go # šifrovací logika
└─ style.css # responzivní layout (1 sloupec mobile, 2 desktop) ├─ templates/ # HTMX šablony
└─ static/ # CSS
``` ```
--- ---
@ -133,28 +135,24 @@ REGEN_KEYS=1 go run .
## Fyne GUI režim ## Fyne GUI režim
Projekt teď obsahuje i desktop GUI (Fyne v2) se třemi záložkami: Spuštění desktopu:
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:
```bash ```bash
go run . gui 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 ```bash
go run . http go run . web
``` ```
--- ---