GnuPG:用自定义 GUI 替换“pinentry”

GnuPG:用自定义 GUI 替换“pinentry”

我在我的应用程序中使用了 GnuPG,有时我需要输入密码才能继续。

当我这样做时,我得到以下pinentry对话框:

在此处输入图片描述

但我想改变该对话框并添加我的自定义内容(我使用 React 创建的对话框)。

我该怎么做?

答案1

GnuPG 使用基于文本的协议“Assuan IPC”与 pinentry 交互。整体格式与 gpg-agent、scdaemon 和其他 GnuPG 组件使用的格式完全相同。

要实现它,您的程序需要能够通过 stdin 接收命令并通过 stdout 接收响应。Assuan IPC 协议完全基于文本,每行一个命令,并且使用百分比编码值(如 URL 中一样,但空格除外)不是转换为 +)。

pinentry 使用的命令记录在info "(pinentry)Protocol"信息页面。您的程序需要接受诸如 OPTION、SETPROMPT、SETTITLE、SETDESC 等命令并返回 OK/ERR 响应。

    */usr/bin/pinentry is started*
Pinentry:   OK Carlos' React-based Pinentry Ready!
GnuPG:      OPTION display=:0
Pinentry:   OK
GnuPG:      SETDESC Please%20unlock%20the%20card
Pinentry:   OK
GnuPG:      GETPIN
    *the GUI window shows up*
    *user enters "secret password"*
Pinentry:   D secret%20password
Pinentry:   OK

一旦您收到GETPINCONFIRM命令,您就可以显示相应的窗口,并且一旦您有了输入,您就必须通过 stdout 将其作为“数据”响应返回(“OK”之前的“D”)。

最后,配置~/.gnupg/gpg-agent.conf使用自定义的“pinentry-program”而不是标准程序。

相关内容