Use scrypt from libsodium

bcachefs-tools has both libscrypt and libsodium as build dependencies,
but libsodium already includes the same scrypt implementation as libscrypt,
originally written by Colin Percival.

Use the libsodium copy, dropping the extra libscrypt dependency.

Explicitly adopt the default scrypt N, r and p values from libscrypt to
avoid unintended changes in the default work parameters for bcachefs.

Signed-off-by: Chris Webb <chris@arachsys.com>
This commit is contained in:
Chris Webb 2021-10-23 16:49:25 +01:00 committed by Kent Overstreet
parent f9f57789de
commit 49923376d1
7 changed files with 16 additions and 21 deletions

View File

@ -19,7 +19,6 @@ addons:
- libblkid-dev - libblkid-dev
- libkeyutils-dev - libkeyutils-dev
- liblz4-dev - liblz4-dev
- libscrypt-dev
- libsodium-dev - libsodium-dev
- liburcu-dev - liburcu-dev
- libzstd-dev - libzstd-dev

View File

@ -6,7 +6,6 @@ Dependencies:
* libblkid * libblkid
* libkeyutils * libkeyutils
* liblz4 * liblz4
* libscrypt
* libsodium * libsodium
* liburcu * liburcu
* libuuid * libuuid
@ -17,7 +16,7 @@ Dependencies:
Debian (Bullseye or later) and Ubuntu (20.04 or later): you can install these with Debian (Bullseye or later) and Ubuntu (20.04 or later): you can install these with
apt install -y pkg-config libaio-dev libblkid-dev libkeyutils-dev \ apt install -y pkg-config libaio-dev libblkid-dev libkeyutils-dev \
liblz4-dev libscrypt-dev libsodium-dev liburcu-dev libzstd-dev \ liblz4-dev libsodium-dev liburcu-dev libzstd-dev \
uuid-dev zlib1g-dev valgrind libudev-dev git build-essential \ uuid-dev zlib1g-dev valgrind libudev-dev git build-essential \
python3 python3-docutils python3 python3-docutils
@ -25,10 +24,10 @@ Fedora: install the "Development tools" group along with:
dnf install -y libaio-devel libsodium-devel \ dnf install -y libaio-devel libsodium-devel \
libblkid-devel libzstd-devel zlib-devel userspace-rcu-devel \ libblkid-devel libzstd-devel zlib-devel userspace-rcu-devel \
lz4-devel libuuid-devel valgrind-devel keyutils-libs-devel \ lz4-devel libuuid-devel valgrind-devel keyutils-libs-devel \
libscrypt-devel findutils findutils
Arch: install bcachefs-tools-git from the AUR. Arch: install bcachefs-tools-git from the AUR.
Or to build from source, install libscrypt from the AUR along with, Or to build from source, install build dependencies with
pacman -S base-devel libaio keyutils libsodium liburcu zstd valgrind pacman -S base-devel libaio keyutils libsodium liburcu zstd valgrind
Then, just make && make install Then, just make && make install

View File

@ -73,7 +73,7 @@ endif
CFLAGS+=$(PKGCONFIG_CFLAGS) CFLAGS+=$(PKGCONFIG_CFLAGS)
LDLIBS+=$(PKGCONFIG_LDLIBS) LDLIBS+=$(PKGCONFIG_LDLIBS)
LDLIBS+=-lm -lpthread -lrt -lscrypt -lkeyutils -laio -ldl LDLIBS+=-lm -lpthread -lrt -lkeyutils -laio -ldl
LDLIBS+=$(EXTRA_LDLIBS) LDLIBS+=$(EXTRA_LDLIBS)
ifeq ($(PREFIX),/usr) ifeq ($(PREFIX),/usr)

View File

@ -12,7 +12,7 @@
#include <keyutils.h> #include <keyutils.h>
#include <linux/random.h> #include <linux/random.h>
#include <libscrypt.h> #include <sodium/crypto_pwhash_scryptsalsa208sha256.h>
#include <uuid/uuid.h> #include <uuid/uuid.h>
#include "libbcachefs/checksum.h" #include "libbcachefs/checksum.h"
@ -84,12 +84,13 @@ struct bch_key derive_passphrase(struct bch_sb_field_crypt *crypt,
switch (BCH_CRYPT_KDF_TYPE(crypt)) { switch (BCH_CRYPT_KDF_TYPE(crypt)) {
case BCH_KDF_SCRYPT: case BCH_KDF_SCRYPT:
ret = libscrypt_scrypt((void *) passphrase, strlen(passphrase), ret = crypto_pwhash_scryptsalsa208sha256_ll(
salt, sizeof(salt), (void *) passphrase, strlen(passphrase),
1ULL << BCH_KDF_SCRYPT_N(crypt), salt, sizeof(salt),
1ULL << BCH_KDF_SCRYPT_R(crypt), 1ULL << BCH_KDF_SCRYPT_N(crypt),
1ULL << BCH_KDF_SCRYPT_P(crypt), 1ULL << BCH_KDF_SCRYPT_R(crypt),
(void *) &key, sizeof(key)); 1ULL << BCH_KDF_SCRYPT_P(crypt),
(void *) &key, sizeof(key));
if (ret) if (ret)
die("scrypt error: %i", ret); die("scrypt error: %i", ret);
break; break;
@ -170,9 +171,9 @@ void bch_sb_crypt_init(struct bch_sb *sb,
if (passphrase) { if (passphrase) {
SET_BCH_CRYPT_KDF_TYPE(crypt, BCH_KDF_SCRYPT); SET_BCH_CRYPT_KDF_TYPE(crypt, BCH_KDF_SCRYPT);
SET_BCH_KDF_SCRYPT_N(crypt, ilog2(SCRYPT_N)); SET_BCH_KDF_SCRYPT_N(crypt, ilog2(16384));
SET_BCH_KDF_SCRYPT_R(crypt, ilog2(SCRYPT_r)); SET_BCH_KDF_SCRYPT_R(crypt, ilog2(8));
SET_BCH_KDF_SCRYPT_P(crypt, ilog2(SCRYPT_p)); SET_BCH_KDF_SCRYPT_P(crypt, ilog2(16));
struct bch_key passphrase_key = derive_passphrase(crypt, passphrase); struct bch_key passphrase_key = derive_passphrase(crypt, passphrase);

2
debian/control vendored
View File

@ -4,7 +4,7 @@ Section: utils
Priority: optional Priority: optional
Standards-Version: 3.9.5 Standards-Version: 3.9.5
Build-Depends: debhelper (>= 9), pkg-config, libaio-dev, libblkid-dev, Build-Depends: debhelper (>= 9), pkg-config, libaio-dev, libblkid-dev,
libkeyutils-dev, liblz4-dev, libscrypt-dev, libsodium-dev, liburcu-dev, libkeyutils-dev, liblz4-dev, libsodium-dev, liburcu-dev,
libzstd-dev, uuid-dev, zlib1g-dev, python3, python3-docutils libzstd-dev, uuid-dev, zlib1g-dev, python3, python3-docutils
Homepage: https://bcachefs.org/ Homepage: https://bcachefs.org/

View File

@ -5,7 +5,6 @@
, pkg-config , pkg-config
, attr , attr
, libuuid , libuuid
, libscrypt
, libsodium , libsodium
, keyutils , keyutils
@ -71,7 +70,6 @@ stdenv.mkDerivation {
keyutils # libkeyutils keyutils # libkeyutils
lz4 # liblz4 lz4 # liblz4
libscrypt
libsodium libsodium
liburcu liburcu
libuuid libuuid

View File

@ -15,7 +15,6 @@ BuildRequires: keyutils-libs-devel
BuildRequires: libaio-devel BuildRequires: libaio-devel
BuildRequires: libattr-devel BuildRequires: libattr-devel
BuildRequires: libblkid-devel BuildRequires: libblkid-devel
BuildRequires: libscrypt-devel
BuildRequires: libsodium-devel BuildRequires: libsodium-devel
BuildRequires: libtool-ltdl-devel BuildRequires: libtool-ltdl-devel
BuildRequires: libuuid-devel BuildRequires: libuuid-devel
@ -32,7 +31,6 @@ Requires: keyutils-libs
Requires: libaio Requires: libaio
Requires: libattr Requires: libattr
Requires: libblkid Requires: libblkid
Requires: libscrypt
Requires: libsodium Requires: libsodium
Requires: libtool-ltdl Requires: libtool-ltdl
Requires: libuuid Requires: libuuid