[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] md5sum, sha*sum: use libcrypto where available

From: Pádraig Brady
Subject: [PATCH] md5sum, sha*sum: use libcrypto where available
Date: Wed, 4 Dec 2013 03:59:33 +0000

libcrypto is generally available and has well optimized
crypto hash routines particular to various systems.
For example, testing sha1sum with openssl-1.0.0j
on an i3-2310M, gives a performance boost of about 40%:

$ time sha1sum.old --tag ~/test.iso
SHA1 (/home/padraig/test.iso) = 3c27f7ed01965fd2b89e22128fd62dc51a3bef30
real    0m4.692s
user    0m4.499s
sys     0m0.162s

$ time --tag ~/test.iso
SHA1 (/home/padraig/test.iso) = 3c27f7ed01965fd2b89e22128fd62dc51a3bef30
real    0m2.685s
user    0m2.512s
sys     0m0.170s

* By default, enable use of libcrypto if available.
* src/ Link with libcrypto.
* NEWS: Mention the md5sum and sha*sum improvements.
 NEWS         |    5 +++++ |   11 +++++++++++
 src/ |    9 +++++++++
 3 files changed, 25 insertions(+), 0 deletions(-)

diff --git a/NEWS b/NEWS
index b967885..5d92c99 100644
--- a/NEWS
+++ b/NEWS
@@ -108,6 +108,11 @@ GNU coreutils NEWS                                    -*- 
outline -*-
   base64 encoding throughput for bulk data is increased by about 60%.
+  md5sum uses libcrypto hash routines where available to potentially
+  get better performance through using more system specific code.
+  sha1sum for example has improved throughput by 40% on an i3-2310M.
+  This also affects sha1sum, sha224sum, sha256sum, sha384sum and sha512sum.
   stat and tail work better with EFIVARFS, EXOFS, F2FS, SNFS and UBIFS.
   stat -f --format=%T now reports the file system type, and tail -f now uses
   inotify for files on those file systems, rather than the default (for unknown
diff --git a/ b/
index 8a3ac48..16b6c35 100644
--- a/
+++ b/
@@ -50,6 +50,17 @@ m4_syscmd([test "${GNULIB_POSIXCHECK+set}" = set])
 m4_if(m4_sysval, [0], [], [dnl
+dnl Enable use of libcrypto if available.
+dnl Note we could do this as follows:
+dnl   AS_VAR_SET_IF([with_openssl], [], [with_openssl=optional])
+dnl However that would not document the coreutils adjusted default,
+dnl so we add another --with-openssl description just to document that
+  [AC_HELP_STRING([--with-openssl],
+    [The coreutils default is: --with-openssl=optional])],
+  [],
+  [with_openssl=optional])
diff --git a/src/ b/src/
index 1315e11..fe80f41 100644
--- a/src/
+++ b/src/
@@ -293,6 +293,15 @@ src_stdbuf_LDADD += $(LIBICONV)
 src_timeout_LDADD += $(LIBICONV)
 src_truncate_LDADD += $(LIBICONV)
+# for libcrypto hash routines
+src_md5sum_LDADD += $(LIB_CRYPTO)
+src_sort_LDADD += $(LIB_CRYPTO)
+src_sha1sum_LDADD += $(LIB_CRYPTO)
+src_sha224sum_LDADD += $(LIB_CRYPTO)
+src_sha256sum_LDADD += $(LIB_CRYPTO)
+src_sha384sum_LDADD += $(LIB_CRYPTO)
+src_sha512sum_LDADD += $(LIB_CRYPTO)
 # for canon_host
 src_pinky_LDADD += $(GETADDRINFO_LIB)

reply via email to

[Prev in Thread] Current Thread [Next in Thread]