norsehorse-dev/PGPonyDesktop

GitHub: norsehorse-dev/PGPonyDesktop

PGPonyDesktop 是一款跨平台的 OpenPGP 桌面应用,在本地完成加解密、签名验证、密钥管理和硬件密钥操作,与 Android 端共用同一引擎实现多平台互操作。

Stars: 0 | Forks: 0

# PGPony 桌面版 适用于 **macOS、Linux 和 Windows** 的 OpenPGP —— [PGPony](https://pgpony.app) 家族的桌面端成员。 在本地设备上加密、解密、签名和验证消息与文件,管理您的 keyring,并通过 USB 使用硬件安全密钥。与手机端一样:无账号、无广告、无分析、无 跟踪。 ## 并非重写 本应用编译了与 PGPony Android 应用完全相同的 OpenPGP 引擎 —— packet 处理、 v4 + v6 (RFC 9580) 密钥、后量子复合层(两种传输格式)、OpenPGP 智能卡协议栈、MIME —— 全都原封不动地从 PGPonyAndroid 仓库内置在 [`vendor/`](vendor/) 目录下,并使用了相同的 Bouncy Castle 版本。一套经过测试的实现意味着 能保证在所有设备上实现互操作,并且大大减少了可能产生差异的代码。只有位于 [`src/`](src/) 下的 `com.pgpony.desktop` 是桌面端专属的(Compose UI、CLI、基于文件的 存储),另外还有三个在 [`vendor/README.md`](vendor/README.md) 中登记过的小型适配器。 ## 构建与运行 需要 JDK 17 或更高版本。 ``` ./gradlew run # launch the GUI ./gradlew run --args="selftest" # verify the engine runs on this JVM (keygen + round-trips) ./gradlew run --args="list-keys" # the pgpony CLI — shares the app's keyring ./gradlew test # unit suite ``` 同一个二进制文件既是 GUI 也是 `pgpony` CLI:直接启动(或带上文件参数) 会打开应用;而使用动词(如 `encrypt`、`decrypt`、`sign`、`verify`、`import`、`export`、 `list-keys`、`gen-key`、`card-info`)则会运行命令行。不带任何选项运行 `pgpony <动词>` 会打印其用法。 在 **Windows** 上,命令行是第二个可执行文件 `pgpony-cli.exe`,与 GUI 安装在同一目录下。Windows 需要一个控制台子系统的二进制文件才能向终端输出内容, 并且它不能被命名为 `pgpony.exe`,因为文件系统不区分大小写,而且该名称已被 `PGPony.exe` 占用。 ## 原生安装程序 ``` ./gradlew packageDmg # macOS → build/compose/binaries/main/dmg/ ./gradlew packageDeb # Linux → build/compose/binaries/main/deb/ ./gradlew packageMsi # Windows → build/compose/binaries/main/msi/ (WiX 3.x required) ``` jpackage 仅为运行它的操作系统构建安装程序。Java 运行时已捆绑在内 —— 用户无需 单独的 JDK。发布的安装程序均已签名,且 macOS 构建版本已经过公证;完整的 操作流程见 [`RELEASING.md`](RELEASING.md)。 ## 状态 **1.0.0 —— 已发布。** 已签名并公证的 `.dmg` (macOS, arm64)、`.deb` (Linux, amd64) 和 `.msi` (Windows, x64),每个都附有独立的 PGP 签名和已签名的 `SHA256SUMS`。 下载链接和校验和:[pgpony.app/desktop](https://pgpony.app/desktop)。 以下所有功能均已完成并被测试套件覆盖: | | | | --- | --- | | **Keyring** | Android 应用中的 `PGPDatabase` schema 运行在自带的 SQLite 上。包括双重 PQC 复合在内的密钥生成、子密钥功能、信任/备注/过期/撤销、导入时合并、搜索与排序。 | | **加密功能** | 支持基于流式 API 对文本和文件进行加密、解密、签名和验证,支持拖拽、分离签名以及从不覆盖输出的特性。双向支持 PGP/MIME、`.eml` 编写、带附件的结构化解密。 | | **后量子** | 支持 IETF (v6) 和 GnuPG/LibrePGP 传输格式的 ML-KEM 复合,并已与 gpg 和 sq 进行交叉验证。 | | **备份** | 使用强制二次输入的恢复码进行 `.pgpony` 导出和恢复,包含五种结果的合并报告,支持 OpenKeychain 恢复。 | | **密钥服务器** | WKD → 目录 → Hagrid 查找并带有来源归因,支持单服务器的 VKS/HKP 发布、五步刷新 pipeline、有序目录管理,以及带有 onion 镜像的 Tor/SOCKS。 | | **硬件密钥** | 基于 USB PC/SC 的内置 OpenPGP 卡协议栈 —— 读取/配对、卡上生成密钥、PW1/PW3 生命周期、解密、签名以及签名加加密、带 TTL 的 PIN 缓存。 | | **密码存储** | 基于 `java.nio` 的只读 `pass` —— `.gpg-id` 就近优先,无需解密即可浏览和搜索,自动清理剪贴板,实时的 RFC 6238 TOTP。 | | **桌面集成** | 镜像 Android `IntentHandler` 的打开文件路由、单实例转发、原生菜单栏、系统托盘、过期提醒、二维码渲染与导入、操作系统文件关联。 | | **CLI** | `pgpony` 共享应用的 keyring:encrypt/decrypt/sign/verify/import/export/list-keys/gen-key,支持 stdin·stdout 流式传输、通过环境变量/fd/提示符提供 passphrase,具有稳定的退出码。 | | **本地化** | 六种语言 —— en/de/es/fr/ja/pt-BR —— 覆盖两层字符串,切换时无需重启。 | 各阶段的记录,包括代码中不明显的决策背后的逻辑,均位于 [`docs/phases/`](docs/phases/) 中。记录在案的规划是位于 PGPonyAndroid 仓库中的 `PLANNING_DESKTOP_1_0_0.md`。发布版本按照 [`RELEASING.md`](RELEASING.md) 进行裁切。待手动验证:在所有三种操作系统上的 YubiKey 5 / Token2 矩阵,备份交叉恢复三角(手机 ↔ 桌面 ↔ iOS),以及 Linux 和 Windows 上的纯净机器安装。
标签:CVE, JS文件枚举, Kotlin, OpenPGP, 加密解密, 后台面板检测, 数字签名, 桌面应用