Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date: Mon, 22 Jun 2015 16:26:11 +0300
From: Aleksey Cherepanov <>
Subject: Re: bitslice SHA-256

Manually written bitslice is unbelievable!

I did not look into code precisely, so the following may be
implemented already. I propose a change:

On Fri, May 29, 2015 at 06:35:29AM +0300, Solar Designer wrote:
> "So we can expect that bitslice SHA256 will be (79-62)/62 = 27% slower
> than normal SHA256"

SHA-256 does on each step:
h = g
g = f
f = e
e = d + t1
d = c
c = b
b = a
a = t1 + t2

I think 6 assignment may be replaced by an array and shifting pointer.

Values in variables abcdefgh:
abcdefgh - at the beginning of the first round,
TabcDefg - at the beginning of the second round,
 where T = t1 + t2, D = d + t1

Let's shift it 1 char right:

Now it looks like 6 variables were not moved. Let's introduce an array
A. Then in code, replace variable 'a' with A[0], ..., 'h' with A[-7].
In the end of round, just do --A; . It needs more space for
intermediate variables because array shifts one way, but I guess it is
not a problem. Positions of variables in memory can be reversed to be
hgfedcba to allow ++A; and positive indexes.

It should remove 6 of 8 writes but add dereference op for all these
variables. Is it worth? What do you think?


Aleksey Cherepanov

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.