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