Re: Patch: cprng_fast performance - please review.

Izumi Tsutsui <[email protected]> Fri, 18 Apr 2014 22:20:24 +0900
Newsgroups gmane.os.netbsd.devel.crypto,gmane.os.netbsd.devel.kernel
Message-ID <[email protected]>
tls@ wrote:

> @@ -160,6 +160,7 @@ include "crypto/cast128/files.cast128"
> --- /dev/null	1 Jan 1970 00:00:00 -0000
> +++ crypto/hc128/hc128.c	17 Apr 2014 03:17:18 -0000
 :
> +static inline uint32_t
> +pack_littleendian(const uint8_t *v)
> +{
> +#ifdef LITTLE_ENDIAN
> +	return *((const uint32_t*)v);
> +#else
> +	return (uint32_t)v[3] << 24
> +	    | (uint32_t)v[2] << 16
> +	    | (uint32_t)v[1] << 8
> +	    | (uint32_t)v[0];
> +#endif
> +}

LITTLE_ENDIAN != x86

This should simply be le32dec(9) otherwise
it will cause unaligned trap on arm and mips etc.

> +static inline void
> +unpack_littleendian(uint32_t value, uint8_t *v)
> +{
> +#if BYTE_ORDER == LITTLE_ENDIAN
> +	*((uint32_t*)v) = value;
> +#else
> +	int i;
> +	for(i = 0; i < 4; ++i) {
> +		v[i] = value >> (i * 8);
> +	}
> +#endif
> +}

This should also be le32enc(9), if the byteswap is really necessary.

---
Izumi Tsutsui