| Index: nss/lib/freebl/des.c
|
| diff --git a/nss/lib/freebl/des.c b/nss/lib/freebl/des.c
|
| index 63a56acba433ca2cc3e58edc6070bb14bd7ca7b8..bcfcaba6069b7cde3080665649be4a9fa89701a5 100644
|
| --- a/nss/lib/freebl/des.c
|
| +++ b/nss/lib/freebl/des.c
|
| @@ -13,6 +13,13 @@
|
| #include <stddef.h> /* for ptrdiff_t */
|
| /* #define USE_INDEXING 1 */
|
|
|
| +/* Some processors automatically fix up unaligned memory access, so they can
|
| + * read or write a HALF (4 bytes) at a time whether the address is 4-byte
|
| + * aligned or not. */
|
| +#if defined(NSS_X86_OR_X64)
|
| +#define HAVE_UNALIGNED_ACCESS 1
|
| +#endif
|
| +
|
| /*
|
| * The tables below are the 8 sbox functions, with the 6-bit input permutation
|
| * and the 32-bit output permutation pre-computed.
|
| @@ -421,11 +428,13 @@ DES_MakeSchedule( HALF * ks, const BYTE * key, DESDirection direction)
|
| int delta;
|
| unsigned int ls;
|
|
|
| -#if defined(NSS_X86_OR_X64)
|
| +#if defined(HAVE_UNALIGNED_ACCESS)
|
| left = HALFPTR(key)[0];
|
| right = HALFPTR(key)[1];
|
| +#if defined(IS_LITTLE_ENDIAN)
|
| BYTESWAP(left, temp);
|
| BYTESWAP(right, temp);
|
| +#endif
|
| #else
|
| if (((ptrdiff_t)key & 0x03) == 0) {
|
| left = HALFPTR(key)[0];
|
| @@ -572,11 +581,13 @@ DES_Do1Block(HALF * ks, const BYTE * inbuf, BYTE * outbuf)
|
| register HALF left, right;
|
| register HALF temp;
|
|
|
| -#if defined(NSS_X86_OR_X64)
|
| +#if defined(HAVE_UNALIGNED_ACCESS)
|
| left = HALFPTR(inbuf)[0];
|
| right = HALFPTR(inbuf)[1];
|
| +#if defined(IS_LITTLE_ENDIAN)
|
| BYTESWAP(left, temp);
|
| BYTESWAP(right, temp);
|
| +#endif
|
| #else
|
| if (((ptrdiff_t)inbuf & 0x03) == 0) {
|
| left = HALFPTR(inbuf)[0];
|
| @@ -643,9 +654,11 @@ DES_Do1Block(HALF * ks, const BYTE * inbuf, BYTE * outbuf)
|
|
|
| FP(left, right, temp);
|
|
|
| -#if defined(NSS_X86_OR_X64)
|
| +#if defined(HAVE_UNALIGNED_ACCESS)
|
| +#if defined(IS_LITTLE_ENDIAN)
|
| BYTESWAP(left, temp);
|
| BYTESWAP(right, temp);
|
| +#endif
|
| HALFPTR(outbuf)[0] = left;
|
| HALFPTR(outbuf)[1] = right;
|
| #else
|
|
|