问题标签 [gpgme]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1273 浏览

c++ - 使用 C/C++ 中的 GPGME 使用特定公钥验证 GPG 签名

我有一个 C++ 程序需要验证使用特定私钥使用 GPG 签名的文件的签名。使用 GPGME 我已经成功编写了一个程序,该程序验证给定文件是否已使用与 GPG 密钥环中的一个公钥对应的私钥正确签名。

现在我希望我的程序使用在我的程序中硬编码的公钥来验证文件,而不是仅仅使用 GPG 密钥环中可用的公钥之一来验证签名。

我希望我的程序(将安装在其他人的计算机上)能够验证该文件是否真的来自我。如果它通过使用用户计算机的 GPG 密钥环中的公钥列表进行验证操作,那么用户似乎可以用他自己的私钥对我的文件进行签名,即使我没有,我的程序也会验证文件的签名。签字。

有什么方法可以通过 GPGME 实现这一目标?任何帮助是极大的赞赏。

0 投票
0 回答
225 浏览

c++ - 用于签名的 gpgme 密码保护

我正在尝试深入研究 gpgme 库。为此,我的第一步是复制/粘贴此处答案中给出的功能。我创建了一个新密钥,这是我的 gpg 安装中唯一的一个:

密钥受密码保护。

gpg --sign testfile.txt当我使用gpg签署测试文件时,会按预期要求我输入密码。但是当我使用上面提到的复制/粘贴功能时,它会毫无怨言地签署测试文件,也不知道我的私钥的密码。

我可以验证两个签名,gpg --verify testfile.txt.gpg它在两种情况下都告诉我签名是好的(时间戳当然不同):

也许这是一个完整的加密菜鸟问题,但您不需要密码来解密私钥以签署任何内容吗?

0 投票
1 回答
2058 浏览

ssl - 如何使用 OpenSSL 验证 GPG 签名

我编写了一个简单的跨平台实用程序来使用gpgme验证 GPG 签名。但是 gpgme 在 windows 和其他平台(例如 osx)上不能很好地工作,它需要安装 GnuPG 命令行实用程序,这是一个非常严重的依赖项。我也查看了其他 openpgp 库,例如netgpg,但这些库的可移植性更差(它确实必须使用 mingw-w64 构建)。

是否可以仅使用标准库(如 openssl 和 zlib)实现独立工具来验证 GPG 签名?据我了解,openpgp 由标准密码和散列函数组成。是什么让这变得如此困难以至于没有好的 C 库可以做到这一点?

0 投票
1 回答
294 浏览

c++ - C++ 自定义 pinentry 包装器

我正在尝试编写一个使用 gpg 加密/解密文件的小型 C++ 应用程序。我正在使用 GpgME 库。

我希望能够进行一点行编辑,用户可以在其中输入他想用来解密消息的密钥的密码,而不是弹出 gpg pinentry 应用程序。

我可以通过执行以下操作禁用 pinentry 应用程序弹出: gpgme_set_pinentry_mode(context, GPGME_PINENTRY_MODE_CANCEL);

但我无法以任何其他方式提供密码。我已经在谷歌上搜索了几个星期,据我所知,人们说我可以编写一个“自定义 pinentry 包装器”并以这种方式提供密码。我试图把我的大脑包裹起来,但我就是不知道这意味着什么或如何去做。

任何人都可以帮助我阐明这一点吗?

0 投票
1 回答
1471 浏览

c++ - GPGME:无效的加密引擎

我正在尝试在 C++ 项目上检查使用 gpgme,但是当我尝试访问 OpenPGP 引擎时

我已经在我的电脑上安装了 GnuPG,并且我在 windows 下运行。

更多的命令gpgconfgpg2工作正常,所以 GnuGP 安装得很好

我将 gpgme 的调试级别设置为 9,但出现错误,这是日志:

编辑:这是我运行的代码:

0 投票
1 回答
957 浏览

c++ - 在 Debian 中为 C++ 应用程序使用 GPGME

我想在我的 C++ 应用程序中使用 GPGME 生成和加密密钥。但是,在尝试开始时,我遇到了一个问题:

我为我的 debian 系统下载了开发包。现在我想告诉我的编译器(Qt Creator 中的 gcc)使用文档中提到的工具在哪里可以找到带有 cmake 的库。但我不知道如何添加gpgme-config --cflags --libs到我的编译器标志。这没有用:

当我尝试构建应用程序时,编译器找不到gpgme-config

无论如何gpgme-config --cflags --libs在命令行上执行确实会给我一个结果:

我知道文档还提到了 Automake 和 libtool 以使这个过程更容易。但我之前没有使用过 Automake 或 libtool。


更新:

我还尝试为 GPGME 使用 FindGpgme.cmake 文件。但是我使用的第一个文件需要其他几个 cmake 文件,我也下载了这些文件。我将它们放在与 FindGpgme.cmake 相同的目录中。找到了主 cmake 文件 (FindGpgme.cmake),但没有找到 MacroEnsureVersion 和 MacroBoolTo01。我对 CMakeLists.txt 的更改如下:

我尝试了 FindGpgme.cmake 中其他文件的相对和绝对路径。同样的问题 - cmake 找不到它们。我的第二次尝试是使用我在 gitweb 上找到的文件。错误是:

我完全没有胶水如何解决这个set_package_properties问题。


更新 2

我添加了

按照 kfunk 的建议添加到我的 CMakeLists.txt 中。现在我收到以下错误:

CMakeLists.txt:9 (find_package) 处的 CMake 警告:通过在 CMAKE_MODULE_PATH 中未提供“FindGpgme.cmake”,该项目已要求 CMake 查找“Gpgme”提供的包配置文件,但 CMake 没有找到。

找不到由“Gpgme”提供的具有以下任何名称的包配置文件:

将“Gpgme”的安装前缀添加到 CMAKE_PREFIX_PATH 或将
“Gpgme_DIR”设置为包含上述文件之一的目录。如果“Gpgme”提供单独的开发包或SDK,请确保已安装。

即使消息描述接缝非常详细,我也不知道如何将 FindGpgme.cmake 添加到CMAKE_MODULE_PATH或如何将请求的前缀添加到CMAKE_PREFIX_PATH. 但是绝对安装了开发包(使用包管理器)

0 投票
0 回答
142 浏览

c++ - 在 C++ 应用程序中使用 GPGME 时出现意外的结构

我想在我的 C++ 应用程序中使用 GPGME 生成和加密密钥。但是,在尝试开始时,我遇到了一个问题:

我为我的 debian 系统下载了开发包。我告诉我的编译器如何找到库。只是为了看看我是否能够初始化库(这里提到)我尝试执行以下代码..:

线

qt creator 用红色下划线。消息是

预期令牌';' 得到“结构”

但为什么?


JFYI

作为我早期问题的概要,我的 CMakeLists 如下所示:

我项目根目录中的主 CMakeLists.txt:

以及 application/framework/impl 子目录中的 CMakeLists.txt:


更新

如果我取消注释该行

消息消失。我检查了文档。方法的签名似乎是有效的。我使用的库版本可能有问题吗?


编辑:

这不是编译器错误,而只是 qt 创建者给出的红色标记。我认为这应该是由拼写错误或其他原因引起的。但我看不到任何错别字。此外,即使我没有注释掉该check_version行,该应用程序也会编译并运行。

0 投票
1 回答
493 浏览

c++ - 强制 GPGME 中的 GPG 使用 CAST5 以外的密码

我想使用 GPGME 加密数据(无文件)并将数据保存在数据库中。我了解到以 OpenPGP 作为协议的 GPGME 将使用 GPG 和 CAST5 加密数据。CAST5,如果我检查 gpg2,这就是我的命令行告诉我的:

我不知道为什么它不使用新的 AES-128 默认值。但我想我没有可用的最新版本(我的 debian 系统中的包管理器也没有)。

我真的很想通过在此处提到的 gpg.conf 文件和 GPG 的主页上设置相应的值来配置 GPG 以使用 AES 进行加密。gpgme_get_engine_info所以我试图通过使用和查看来获取有关文件位置的信息,home_dir但这条路径似乎是空的。file_nameusr/bin/gpg2。_ 但是,没有 gpg.conf。严格来说,我的系统中根本没有 gpg.conf。那么如果这个文件丢失了怎么办呢?或者有没有办法使用 GPGME 以编程方式设置值?我只发现

所以我可以创建一个新配置并使用这个函数设置路径。但这假设我知道这个文件的样子。可悲的是我没有。

0 投票
1 回答
169 浏览

gnupg - Check if config file was set successfully for GnuPG in GPGME

For specifying the preferenced order of encryption algorithms in GPG I use

to set a custom config file. However how can I check if this operation was successful? home_dir is set to the given value, but this also happens if I pass a directory without a config file. I can't see any function or call in the documentation to evaluate if the config file was loaded OR what the current preference order is.

0 投票
1 回答
685 浏览

ruby - Ruby GPGME - How to encrypt large files

I'm having difficulty to Encrypt large files (bigger than available memory) using GPGME in Ruby.

In this case I got an error of memory allocation: "read: failed to allocate memory (NoMemoryError)"

Someone can explain me how to read the source file chunk by chunk (of 100Mb for example) and write them passing by the crypting?