The bulk of this is the patches I sent out yesterday, but there's a few added tweaks from today there, and it's now one nice series instead of a patch followed by a "Haa, I improved on it" etc, so you can get the whole thing without actually having to hunt for the pieces. It's a series of 7 patches: block-sha1: add new optimized C 'block-sha1' routines block-sha1: try to use rol/ror appropriately block-sha1: make the 'ntohl()' part of the first SHA1 loop block-sha1: re-use the temporary array as we calculate the SHA1 block-sha1: macroize the rounds a bit further block-sha1: Use '(B&C)+(D&(B^C))' instead of '(B&C)|(D&(B|C))' in round 3 block-sha1: get rid of redundant 'lenW' context where the thing is loosely based on the Mozilla SHA1 routines but by the end doesn't really resemble them all that much. The Mozilla ones suck donkey d*ck in so many ways - unnecessary copies, idiotic byte-at-a-time build-up of the hash input etc. The end result is pretty much equivalent in performance to the OpenSSL SHA1 code for me on x86-64. Getting rid of OpenSSL gets rid of another couple of shared library loadings, and as a result my "make -j64 test" is now a couple of seconds faster with this than with OpenSSL in my rather unscientific tests. The code isn't very big: Makefile | 9 +++ block-sha1/sha1.c | 158 +++++++++++++++++++++++++++++++++++++++++++++++++++++ block-sha1/sha1.h | 20 +++++++ 3 files changed, 187 insertions(+), 0 deletions(-) create mode 100644 block-sha1/sha1.c create mode 100644 block-sha1/sha1.h and passes all my tests. It's really hard to not do the SHA1 right and still pass any tests at all, so it should all be good. Enable them with BLK_SHA1=1. Linus -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html