Sobre el proyecto
# PGPony Desktop
OpenPGP para **macOS, Linux y Windows** — el miembro de escritorio de la familia [PGPony](https://pgpony.app).
Cifra, descifra, firma y verifica mensajes y archivos, gestiona tu llavero y usa una clave de seguridad de hardware por USB — todo en el dispositivo. Igual que los teléfonos: sin cuentas, sin anuncios, sin analíticas, sin rastreo.
## No es una reescritura
Esta aplicación compila el **mismo** motor OpenPGP exacto que distribuye la app PGPony para Android — manejo de paquetes, claves v4 + v6 (RFC 9580), la capa compuesta post-cuántica (ambos formatos de cable), la pila del protocolo de tarjeta inteligente OpenPGP, MIME — incorporado textualmente bajo [`vendor/`](vendor/) desde el repositorio PGPonyAndroid, sobre la misma versión de Bouncy Castle. Una única implementación probada significa interoperabilidad garantizada en todos los dispositivos, y mucho menos código que podría desviarse. Solo `com.pgpony.desktop` bajo [`src/`](src/) es específico del escritorio (interfaz Compose, CLI, almacenes respaldados por archivos), más tres pequeños adaptadores inventariados en [`vendor/README.md`](vendor/README.md).
## Compilar y ejecutar
Requiere un JDK 17 o superior.
```sh
./gradlew run # inicia la interfaz gráfica
./gradlew run --args="selftest" # verifica que el motor se ejecuta en esta JVM (generación de claves + idas y vueltas)
./gradlew run --args="list-keys" # la CLI pgpony — comparte el llavero de la app
./gradlew test # suite de pruebas unitarias
```
El mismo binario es tanto la interfaz gráfica como la CLI `pgpony`: un inicio sin argumentos (o con un archivo como argumento) abre la app; un verbo (`encrypt`, `decrypt`, `sign`, `verify`, `import`, `export`, `list-keys`, `gen-key`, `card-info`) ejecuta la línea de comandos. `pgpony <verbo>` sin opciones imprime su uso.
En **Windows** la línea de comandos es un segundo ejecutable, `pgpony-cli.exe`, instalado junto a la interfaz gráfica. Windows necesita un binario de subsistema de consola para poder escribir en una terminal, y no puede llamarse `pgpony.exe` porque el sistema de archivos no distingue mayúsculas y minúsculas y ese nombre ya es `PGPony.exe`.
## Instaladores nativos
```sh
./gradlew packageDmg # macOS → build/compose/binaries/main/dmg/
./gradlew packageDeb # Linux → build/compose/binaries/main/deb/
./gradlew packageMsi # Windows → build/compose/binaries/main/msi/ (requiere WiX 3.x)
```
jpackage construye un instalador solo para el sistema operativo en el que se ejecuta. El entorno de ejecución de Java está incluido — los usuarios no necesitan un JDK aparte. Los instaladores publicados están firmados, y la compilación de macOS está notarizada; el procedimiento completo está en [`RELEASING.md`](RELEASING.md).
## Estado
**1.0.0 — publicada.** `.dmg` firmado y notarizado (macOS, arm64), `.deb` (Linux, amd64) y `.msi` (Windows, x64), cada uno con una firma PGP separada y un `SHA256SUMS` firmado. Descargas y sumas de verificación: [pgpony.app/desktop](https://pgpony.app/desktop).
Todo lo siguiente está completo y cubierto por la suite de pruebas:
| | |
| --- | --- |
| **Llavero** | El esquema `PGPDatabase` de la app Android sobre SQLite incluido. Generación de claves incluyendo ambos compuestos PQC, capacidades de subclaves, confianza/notas/expiración/revocación, fusión al importar, búsqueda y ordenación. |
| **Superficies criptográficas** | Cifrar, descifrar, firmar y verificar en texto y archivos, sobre las API de streaming, con arrastrar y soltar, firmas separadas y salidas que nunca se sobrescriben. PGP/MIME en ambas direcciones, composición `.eml`, descifrado estructurado con adjuntos. |
| **Post-cuántico** | Compuestos ML-KEM en ambos formatos de cable, el de la IETF (v6) y el de GnuPG/LibrePGP, verificados cruzadamente contra gpg y sq. |
| **Copia de seguridad** | Exportación y restauración `.pgpony` con el código de recuperación de reintroducción forzada, informe de fusión de cinco resultados, restauración de OpenKeychain. |
| **Servidores de claves** | Búsqueda WKD → directorio → Hagrid con atribución de origen, publicación VKS/HKP por servidor, el proceso de actualización de cinco pasos, gestión ordenada de directorios, Tor/SOCKS con el espejo onion. |
| **Claves de hardware** | La pila de tarjeta OpenPGP incorporada sobre USB PC/SC — lectura/emparejamiento, generación de claves en la tarjeta, ciclo de vida de PW1/PW3, descifrado, firma y firma-y-cifrado, caché de PIN con TTL. |
| **Almacén de contraseñas** | `pass` de solo lectura sobre `java.nio` — `.gpg-id` del más cercano primero, navegación y búsqueda sin descifrar, portapapeles con borrado automático, TOTP RFC 6238 en vivo. |
| **Integración con el escritorio** | Enrutamiento de abrir-un-archivo que refleja el `IntentHandler` de Android, reenvío de instancia única, barra de menú nativa, bandeja del sistema, recordatorios de expiración, renderizado e importación de QR, asociaciones de archivos del sistema operativo. |
| **CLI** | `pgpony` compartiendo el llavero de la app: encrypt/decrypt/sign/verify/import/export/list-keys/gen-key, streaming por stdin·stdout, frase de contraseña vía env/fd/prompt, códigos de salida estables. |
| **Localización** | Seis idiomas — en/de/es/fr/ja/pt-BR — sobre dos capas de cadenas, conmutables sin reiniciar. |
Los registros fase por fase, incluido el razonamiento detrás de decisiones que no son obvias a partir del código, están en [`docs/phases/`](docs/phases/). El plan de referencia es `PLANNING_DESKTOP_1_0_0.md` en el repositorio PGPonyAndroid. Las publicaciones se cortan según [`RELEASING.md`](RELEASING.md).
Pendiente de validación manual: la matriz de YubiKey 5 / Token2 en los tres sistemas operativos, el triángulo de restauración cruzada de copias de seguridad (teléfono ↔ escritorio ↔ iOS), y las instalaciones en máquinas limpias en Linux y Windows.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.