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.