Index: sha2.c =================================================================== RCS file: /cvs/src/sys/crypto/sha2.c,v retrieving revision 1.16 diff -u -p -r1.16 sha2.c --- sha2.c 23 Dec 2014 20:40:06 -0000 1.16 +++ sha2.c 31 Dec 2014 12:46:07 -0000 @@ -38,6 +38,7 @@ #include #include #include +#include /* * UNROLLED TRANSFORM LOOP NOTE: @@ -477,10 +478,6 @@ SHA256Final(u_int8_t digest[], SHA2_CTX unsigned int usedspace; usedspace = (context->bitcount[0] >> 3) % SHA256_BLOCK_LENGTH; -#if BYTE_ORDER == LITTLE_ENDIAN - /* Convert FROM host byte order */ - context->bitcount[0] = swap64(context->bitcount[0]); -#endif if (usedspace > 0) { /* Begin padding with a 1 bit: */ context->buffer[usedspace++] = 0x80; @@ -509,22 +506,25 @@ SHA256Final(u_int8_t digest[], SHA2_CTX *context->buffer = 0x80; } /* Set the bit count: */ - *(u_int64_t *)&context->buffer[SHA256_SHORT_BLOCK_LENGTH] = context->bitcount[0]; + htobem64((u_int64_t *)&context->buffer[SHA256_SHORT_BLOCK_LENGTH], + context->bitcount[0]); /* Final transform: */ SHA256Transform(context->state.st32, context->buffer); + /* Save the hash data for output: */ #if BYTE_ORDER == LITTLE_ENDIAN { /* Convert TO host byte order */ int j; for (j = 0; j < 8; j++) { - *d++ = swap32(context->state.st32[j]); + context->state.st32[j] = + bemtoh32(&context->state.st32[j]); } } -#else - memcpy(d, context->state.st32, SHA256_DIGEST_LENGTH); #endif + memcpy(d, context->state.st32, SHA256_DIGEST_LENGTH); + /* Clean up state data: */ explicit_bzero(context, sizeof(*context)); usedspace = 0; @@ -758,11 +758,6 @@ SHA512Last(SHA2_CTX *context) unsigned int usedspace; usedspace = (context->bitcount[0] >> 3) % SHA512_BLOCK_LENGTH; -#if BYTE_ORDER == LITTLE_ENDIAN - /* Convert FROM host byte order */ - context->bitcount[0] = swap64(context->bitcount[0]); - context->bitcount[1] = swap64(context->bitcount[1]); -#endif if (usedspace > 0) { /* Begin padding with a 1 bit: */ context->buffer[usedspace++] = 0x80; @@ -790,8 +785,10 @@ SHA512Last(SHA2_CTX *context) *context->buffer = 0x80; } /* Store the length of input data (in bits): */ - *(u_int64_t *)&context->buffer[SHA512_SHORT_BLOCK_LENGTH] = context->bitcount[1]; - *(u_int64_t *)&context->buffer[SHA512_SHORT_BLOCK_LENGTH+8] = context->bitcount[0]; + htobem64((u_int64_t *)&context->buffer[SHA512_SHORT_BLOCK_LENGTH], + context->bitcount[1]); + htobem64((u_int64_t *)&context->buffer[SHA512_SHORT_BLOCK_LENGTH+8], + context->bitcount[0]); /* Final transform: */ SHA512Transform(context->state.st64, context->buffer); @@ -810,12 +807,12 @@ SHA512Final(u_int8_t digest[], SHA2_CTX /* Convert TO host byte order */ int j; for (j = 0; j < 8; j++) { - *d++ = swap64(context->state.st64[j]); + context->state.st64[j] = + bemtoh64(&context->state.st64[j]); } } -#else - memcpy(d, context->state.st64, SHA512_DIGEST_LENGTH); #endif + memcpy(d, context->state.st64, SHA512_DIGEST_LENGTH); /* Zero out state data */ explicit_bzero(context, sizeof(*context)); @@ -851,12 +848,13 @@ SHA384Final(u_int8_t digest[], SHA2_CTX /* Convert TO host byte order */ int j; for (j = 0; j < 6; j++) { - *d++ = swap64(context->state.st64[j]); + context->state.st64[j] = + bemtoh64(&context->state.st64[j]); } } -#else - memcpy(d, context->state.st64, SHA384_DIGEST_LENGTH); #endif + memcpy(d, context->state.st64, SHA384_DIGEST_LENGTH); + /* Zero out state data */ explicit_bzero(context, sizeof(*context)); }