Openwall GNU/*/Linux - a small security-enhanced Linux distro for servers
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Sun, 14 Apr 2013 16:39:04 +0400
From: Solar Designer <solar@...nwall.com>
To: john-dev@...ts.openwall.com
Subject: Re: [patch] sse/xop implementation of raw-sha512

On Sun, Apr 14, 2013 at 04:56:34AM -0700, Jeremi Gosney wrote:
> +static inline void alter_endianity_64 (void *_x, unsigned int size)
> +{
> +    uint64_t *x = (uint64_t *) _x;
> +    int i;
> +
> +    for (i=0; i < (size >> 2); i++)
> +        x[i] = __builtin_bswap64 (x[i]);
> +}

Since you're working on uint64_t here, "size >> 2" should probably be
"size >> 3" (or just "size / sizeof(*x)" to keep this line generic).

> +static int binary_hash_0 (void *binary) { return *(uint64_t *) binary & 0xf; }

Your use of uint64_t here requires that binary be 8-byte aligned, but I
think you're only ensuring it is 4-byte aligned.  I suggest that you use
uint32_t here.  This code will only ever run on little-endian anyway -
well, or at least it needs other changes for AltiVec.

There may be more issues like this, stemming from the code update from
SHA-256 to SHA-512, which turned many things into 64-bit (but not all).

Thanks,

Alexander

Powered by blists - more mailing lists

Your e-mail address:

Powered by Openwall GNU/*/Linux - Powered by OpenVZ