16个版本 (稳定)

1.7.0 2024年7月9日
1.6.0 2024年1月25日
1.5.0 2023年8月29日
1.4.1 2023年6月27日
0.2.0 2022年5月12日

#1057 in 加密学

Download history 1/week @ 2024-05-25 1/week @ 2024-06-29 155/week @ 2024-07-06 13/week @ 2024-07-13 104/week @ 2024-07-27

每月下载 272次

LGPL-2.0-or-later

120KB
2.5K SLoC

该库提供了使用Sequoia实现的rpmPGP接口

配置

此库的加密策略可以自定义。它通过依次检查以下内容来查找配置文件

  • 环境变量 RPM_SEQUOIA_CRYPTO_POLICY
  • /etc/crypto-policies/back-ends/rpm-sequoia.config,
  • 环境变量 SEQUOIA_CRYPTO_POLICY,最后是,
  • /etc/crypto-policies/back-ends/sequoia.config.

仅使用存在的第一个配置文件。如果环境设置为空字符串,则使用空配置文件。也就是说,使用默认策略。

因此,如果未设置 RPM_SEQUOIA_CRYPTO_POLICY,并且 /etc/crypto-policies/back-ends/rpm-sequoia.config,则将使用后者。在这种情况下,将完全忽略 SEQUOIA_CRYPTO_POLICY/etc/crypto-policies/back-ends/sequoia.config

有关加密策略的信息,请参阅Fedora Crypto Policy项目。

构建

要构建,您需要rustc(版本1.73或更高版本)、cargo以及Sequoia默认使用的加密库nettle-devel

以下是构建rpm-sequoia和使用它的rpm版本的方法

$ sudo dnf install cargo rustc clang pkg-config nettle-devel
$ mkdir /tmp/rpm
$ cd /tmp/rpm
$ git clone [email protected]:rpm-software-management/rpm-sequoia.git
Cloning into 'rpm-sequoia'...
done.
$ cd rpm-sequoia
$ PREFIX=/usr LIBDIR="\${prefix}/lib64" \
  cargo build --release && cargo test --release
    Updating crates.io index
...
test result: ok. ...
$ cd /tmp/rpm
$ git clone [email protected]:rpm-software-management/rpm.git
Cloning into 'rpm'...
done.
$ cd rpm
$ git checkout rpm-4.18.1-release
Switched to a new branch 'rpm-4.18.1-release'
$ sudo dnf install automake autoconf gettext-devel libtool tar zlib-devel file-devel libarchive-devel popt-devel sqlite-devel lua-devel fakechroot
$ autoreconf -fis
...
$ mkdir b
$ cd b
$ export PKG_CONFIG_PATH=/tmp/rpm/rpm-sequoia/target/release
$ export LD_LIBRARY_PATH=/tmp/rpm/rpm-sequoia/target/release
$ ../configure --prefix=/ --with-crypto=sequoia
$ make
$ make check

注意:这构建了rpm的4.18版本,这是rpm的当前稳定版本。当前rpm的开发分支已切换到使用cmake而不是autoconf。请参阅rpmINSTALL文件,了解如何构建master

要使用不同的加密后端,您需要禁用默认后端,并选择您首选的后端。例如,要使用Sequoia的OpenSSL后端,您需要按照以下方式编译 rpm-sequoia

$ cargo build --release --no-default-features --features crypto-openssl

有关目前支持的加密后端列表,请参阅 sequoia-openpgp 的 README

rpm-sequoia工件(.a、.so和.pc文件)放置在构建目录中,在本例中为 /tmp/rpm/rpm-sequoia/target/release

在调用 cargo build 时,我们还设置了两个环境变量

  • PREFIX 是用于生成的 rpm-sequoia.pc 文件的前缀。默认为 /usr/local

  • LIBDIR 是在生成的元数据中列出的安装库路径。它可以是一个绝对路径,也可以基于 ${prefix} 的路径,默认为 ${prefix}/lib

要运行一个或两个测试,请执行以下类似操作

注意:在构建或运行测试套件时,必须确保已正确设置 PKG_CONFIG_PATHLD_LIBRARY_PATH(如上述转储所示)。

$ cd /tmp/rpm/rpm/b/tests
$ export PKG_CONFIG_PATH=/tmp/rpm/rpm-sequoia/target/release
$ export LD_LIBRARY_PATH=/tmp/rpm/rpm-sequoia/target/release
$ make populate_testing
$ T="266 273"; for t in $T; do if ! ../../tests/rpmtests $t; then cat rpmtests.dir/$t/rpmtests.log; fi; done

要获取跟踪输出,请将 RPM_TRACE 设置为 1

$ cd /tmp/rpm/rpm/b/tests
$ export PKG_CONFIG_PATH=/tmp/rpm/rpm-sequoia/target/release
$ export LD_LIBRARY_PATH=/tmp/rpm/rpm-sequoia/target/release
$ make populate_testing
$ export RPM_TRACE=1
$ ../../tests/rpmtests 273
$ cat rpmtests.dir/273/rpmtests.log
...
+pgpDigParamsFree: -> success
+rpmFreeCrypto: entered
+rpmFreeCrypto: -> success
273. rpmsigdig.at:495: 273. rpmsign --addsign (rpmsigdig.at:495): FAILED (rpmsigdig.at:503)
...

依赖关系

~13-25MB
~302K SLoC