summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Webb <chris@arachsys.com>2021-10-23 16:49:25 +0100
committerKent Overstreet <kent.overstreet@gmail.com>2021-10-23 12:16:08 -0400
commit49923376d13f1b22c0388e1b98b5943f782b4f57 (patch)
treecbfe1a8775bed5f403fb7487c240de864046f15a
parentf9f57789de567726f7cfa46bd13df4b0815d137a (diff)
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>
-rw-r--r--.travis.yml1
-rw-r--r--INSTALL7
-rw-r--r--Makefile2
-rw-r--r--crypto.c21
-rw-r--r--debian/control2
-rw-r--r--default.nix2
-rw-r--r--packaging/bcachefs-tools.spec2
7 files changed, 16 insertions, 21 deletions
diff --git a/.travis.yml b/.travis.yml
index 947997b3..e66f0c2a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -19,7 +19,6 @@ addons:
- libblkid-dev
- libkeyutils-dev
- liblz4-dev
- - libscrypt-dev
- libsodium-dev
- liburcu-dev
- libzstd-dev
diff --git a/INSTALL b/INSTALL
index f1d38774..b4d60bf4 100644
--- a/INSTALL
+++ b/INSTALL
@@ -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
diff --git a/Makefile b/Makefile
index e4f6820f..e94419fb 100644
--- a/Makefile
+++ b/Makefile
@@ -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)
diff --git a/crypto.c b/crypto.c
index 7f7fbd5a..43753a3e 100644
--- a/crypto.c
+++ b/crypto.c
@@ -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,12 +84,13 @@ 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),
- salt, sizeof(salt),
- 1ULL << BCH_KDF_SCRYPT_N(crypt),
- 1ULL << BCH_KDF_SCRYPT_R(crypt),
- 1ULL << BCH_KDF_SCRYPT_P(crypt),
- (void *) &key, sizeof(key));
+ ret = crypto_pwhash_scryptsalsa208sha256_ll(
+ (void *) passphrase, strlen(passphrase),
+ salt, sizeof(salt),
+ 1ULL << BCH_KDF_SCRYPT_N(crypt),
+ 1ULL << BCH_KDF_SCRYPT_R(crypt),
+ 1ULL << BCH_KDF_SCRYPT_P(crypt),
+ (void *) &key, sizeof(key));
if (ret)
die("scrypt error: %i", ret);
break;
@@ -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);
diff --git a/debian/control b/debian/control
index f8752bb7..091161da 100644
--- a/debian/control
+++ b/debian/control
@@ -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/
diff --git a/default.nix b/default.nix
index eee7300f..48f2aa93 100644
--- a/default.nix
+++ b/default.nix
@@ -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
diff --git a/packaging/bcachefs-tools.spec b/packaging/bcachefs-tools.spec
index 4946cef9..00d0fbb4 100644
--- a/packaging/bcachefs-tools.spec
+++ b/packaging/bcachefs-tools.spec
@@ -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