feature/ui - zatim ne uplne uhlazena ale celkem pouzitelna appka #1
106
README.md
106
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:
|
||||
|
||||
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)",
|
||||
```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.
|
||||
|
||||
---
|
||||
|
||||
@ -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
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Loading…
Reference in New Issue
Block a user