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
- libkeyutils-dev
- liblz4-dev
- libscrypt-dev
- libsodium-dev
- liburcu-dev
- libzstd-dev

View File

@ -6,7 +6,6 @@ Dependencies:
* libblkid
* libkeyutils
* liblz4
* libscrypt
* libsodium
* liburcu
* libuuid
@ -17,7 +16,7 @@ Dependencies:
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 \
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 \
python3 python3-docutils
@ -25,10 +24,10 @@ Fedora: install the "Development tools" group along with:
dnf install -y libaio-devel libsodium-devel \
libblkid-devel libzstd-devel zlib-devel userspace-rcu-devel \
lz4-devel libuuid-devel valgrind-devel keyutils-libs-devel \
libscrypt-devel findutils
findutils
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
Then, just make && make install

View File

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

View File

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

2
debian/control vendored
View File

@ -4,7 +4,7 @@ Section: utils
Priority: optional
Standards-Version: 3.9.5
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
Homepage: https://bcachefs.org/

View File

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

View File

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