scrub/scrub-2.6.1-use-libgcrypt.patch
DistroBaker f7daba9a70 Merged update from upstream sources
This is an automated DistroBaker update from upstream sources.
If you do not know what this is about or would like to opt out,
contact the OSCI team.

Source: https://src.fedoraproject.org/rpms/scrub.git#fcef9c97a0cecf56658438e4712073a3f75780e1
2021-03-18 19:30:17 +00:00

230 lines
6.4 KiB
Diff

diff -up scrub-2.6.1/configure.ac.libgcrypt scrub-2.6.1/configure.ac
--- scrub-2.6.1/configure.ac.libgcrypt 2014-08-26 14:15:12.000000000 -0400
+++ scrub-2.6.1/configure.ac 2021-02-22 13:42:48.489217200 -0500
@@ -70,6 +70,25 @@ AC_CHECK_FUNCS( \
X_AC_CHECK_PTHREADS
##
+# gcrypt library
+##
+have_libgcrypt=no
+AC_ARG_WITH(libgcrypt, AS_HELP_STRING([--without-libgcrypt], [build without libgcrypt;
+ fallback to custom AES implementation]))
+AS_IF([test "x$with_libgcrypt" != "xno"],
+ [AM_PATH_LIBGCRYPT([1.5.0],
+ [AC_DEFINE([HAVE_LIBGCRYPT], [1], [libgcrypt API available])
+ gcrypt_CFLAGS="$LIBGCRYPT_CFLAGS"
+ gcrypt_LIBS="$LIBGCRYPT_LIBS"
+ have_libgcrypt=yes
+ ]
+ )]
+)
+AM_CONDITIONAL([LIBGCRYPT], [test "$have_libgcrypt" = "yes"])
+AC_SUBST([gcrypt_CFLAGS])
+AC_SUBST([gcrypt_LIBS])
+
+##
# Arrange for large file support
##
AC_SYS_LARGEFILE
diff -up scrub-2.6.1/src/genrand.c.libgcrypt scrub-2.6.1/src/genrand.c
--- scrub-2.6.1/src/genrand.c.libgcrypt 2014-08-20 17:33:43.000000000 -0400
+++ scrub-2.6.1/src/genrand.c 2021-02-22 13:42:48.490217204 -0500
@@ -37,21 +37,27 @@
#include <assert.h>
#include <libgen.h>
-#include "aes.h"
#include "util.h"
#include "genrand.h"
#include "hwrand.h"
-#define PATH_URANDOM "/dev/urandom"
-
-#define PAYLOAD_SZ 16
-#define KEY_SZ 16
+#ifdef HAVE_LIBGCRYPT
+#include <gcrypt.h>
+#else
+#include "aes.h"
+#endif /* HAVE_LIBGCRYPT. */
extern char *prog;
static bool no_hwrand = false;
static hwrand_t gen_hwrand;
+#ifndef HAVE_LIBGCRYPT
+#define PATH_URANDOM "/dev/urandom"
+
+#define PAYLOAD_SZ 16
+#define KEY_SZ 16
+
static aes_context ctx;
static unsigned char ctr[PAYLOAD_SZ];
@@ -140,17 +146,26 @@ churnrand(void)
error:
return -1;
}
+#endif /* HAVE_LIBGCRYPT. */
/* Initialize the module.
*/
int
initrand(void)
{
+#ifndef HAVE_LIBGCRYPT
struct timeval tv;
+#else
+ if (!gcry_check_version(GCRYPT_VERSION)) {
+ goto error;
+ }
+ gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);
+#endif /* HAVE_LIBGCRYPT */
if (!no_hwrand)
gen_hwrand = init_hwrand();
+#ifndef HAVE_LIBGCRYPT
/* Always initialize the software random number generator as backup */
if (gettimeofday(&tv, NULL) < 0)
@@ -163,6 +178,7 @@ initrand(void)
#endif
if (churnrand() < 0)
goto error;
+#endif /* HAVE_LIBGCRYPT. */
return 0;
error:
return -1;
@@ -173,9 +189,11 @@ error:
void
genrand(unsigned char *buf, int buflen)
{
+#ifndef HAVE_LIBGCRYPT
int i;
unsigned char out[PAYLOAD_SZ];
int cpylen = PAYLOAD_SZ;
+#endif /* HAVE_LIBGCRYPT. */
if (gen_hwrand) {
bool hwok = gen_hwrand(buf, buflen);
@@ -183,6 +201,7 @@ genrand(unsigned char *buf, int buflen)
return;
}
+#ifndef HAVE_LIBGCRYPT
for (i = 0; i < buflen; i += cpylen) {
aes_encrypt(&ctx, ctr, out);
incr128(ctr);
@@ -191,6 +210,9 @@ genrand(unsigned char *buf, int buflen)
memcpy(&buf[i], out, cpylen);
}
assert(i == buflen);
+#else
+ gcry_randomize(buf, buflen, GCRY_STRONG_RANDOM);
+#endif /* HAVE_LIBGCRYPT. */
}
/*
diff -up scrub-2.6.1/src/genrand.h.libgcrypt scrub-2.6.1/src/genrand.h
--- scrub-2.6.1/src/genrand.h.libgcrypt 2014-08-20 17:33:43.000000000 -0400
+++ scrub-2.6.1/src/genrand.h 2021-02-22 13:42:48.490217204 -0500
@@ -1,8 +1,14 @@
+#include "config.h"
+
void disable_hwrand(void);
int initrand(void);
-int churnrand(void);
void genrand(unsigned char *buf, int buflen);
+#ifndef HAVE_LIBGCRYPT
+int churnrand(void);
+#endif /* HAVE_LIBGCRYPT. */
+
+
/*
* vi:tabstop=4 shiftwidth=4 expandtab
*/
diff -up scrub-2.6.1/src/Makefile.am.libgcrypt scrub-2.6.1/src/Makefile.am
--- scrub-2.6.1/src/Makefile.am.libgcrypt 2014-08-20 17:33:43.000000000 -0400
+++ scrub-2.6.1/src/Makefile.am 2021-02-22 13:43:47.008492696 -0500
@@ -1,8 +1,6 @@
bin_PROGRAMS = scrub
scrub_SOURCES = \
- aes.c \
- aes.h \
filldentry.c \
filldentry.h \
fillfile.c \
@@ -24,3 +22,9 @@ scrub_SOURCES = \
util.h
scrub_LDADD = $(LIBPTHREAD)
+
+if LIBGCRYPT
+scrub_LDADD += $(gcrypt_LIBS)
+else
+scrub_SOURCES += aes.c aes.h
+endif
diff -up scrub-2.6.1/src/scrub.c.libgcrypt scrub-2.6.1/src/scrub.c
--- scrub-2.6.1/src/scrub.c.libgcrypt 2021-02-22 13:42:48.488217195 -0500
+++ scrub-2.6.1/src/scrub.c 2021-02-22 13:42:48.490217204 -0500
@@ -459,11 +459,13 @@ scrub(char *path, off_t size, const sequ
case PAT_RANDOM:
printf("%s: %-8s", prog, "random");
progress_create(&p, pcol);
+#ifndef HAVE_LIBGCRYPT
if (churnrand() < 0) {
fprintf(stderr, "%s: churnrand: %s\n", prog,
strerror(errno));
exit(1);
}
+#endif /* HAVE_LIBGCRYPT. */
written = fillfile(path, size, buf, bufsize,
(progress_t)progress_update, p,
(refill_t)genrand, sparse, enospc);
diff -up scrub-2.6.1/test/Makefile.am.libgcrypt scrub-2.6.1/test/Makefile.am
--- scrub-2.6.1/test/Makefile.am.libgcrypt 2014-08-26 14:11:14.000000000 -0400
+++ scrub-2.6.1/test/Makefile.am 2021-02-22 13:44:59.301833042 -0500
@@ -1,8 +1,8 @@
-check_PROGRAMS = pad trand aestest tprogress tgetsize tsig tsize pat
+check_PROGRAMS = pad trand tprogress tgetsize tsig tsize pat
TESTS_ENVIRONMENT = env
TESTS_ENVIRONMENT += "PATH_SCRUB=$(top_builddir)/src/scrub"
-TESTS = t00 t01 t02 t03 t04 t05 t06 t07 t08 t09 t10 t11 t12 t13 t14 t15 t16 \
+TESTS = t01 t02 t03 t04 t05 t06 t07 t08 t09 t10 t11 t12 t13 t14 t15 t16 \
t17 t18 t19 t20 t21 t22
CLEANFILES = *.out *.diff testfile
@@ -13,17 +13,24 @@ common_sources = \
$(top_srcdir)/src/getsize.c \
$(top_srcdir)/src/genrand.c \
$(top_srcdir)/src/hwrand.c \
- $(top_srcdir)/src/aes.c \
$(top_srcdir)/src/util.c \
$(top_srcdir)/src/progress.c \
$(top_srcdir)/src/sig.c
pad_SOURCES = pad.c $(common_sources)
trand_SOURCES = trand.c $(common_sources)
-aestest_SOURCES = aestest.c $(common_sources)
tprogress_SOURCES = tprogress.c $(common_sources)
tgetsize_SOURCES = tgetsize.c $(common_sources)
tsig_SOURCES = tsig.c $(common_sources)
pat_SOURCES = pat.c $(common_sources)
+if LIBGCRYPT
+AM_LDFLAGS = $(gcrypt_LIBS)
+else
+check_PROGRAMS += aestest
+TESTS += t00
+common_sources += $(top_srcdir)/src/aes.c
+aestest_SOURCES = aestest.c $(common_sources)
+endif
+
EXTRA_DIST = $(TESTS) $(TESTS:%=%.exp)