minor improvement sha256
authorNIIBE Yutaka <gniibe@fsij.org>
Fri, 25 Jan 2013 04:52:23 +0000 (13:52 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Fri, 25 Jan 2013 04:52:23 +0000 (13:52 +0900)
ChangeLog
src/sha256.c

index e566419..0043398 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2013-01-25  Niibe Yutaka  <gniibe@fsij.org>
+
+       * src/sha256.c (memcpy_bswap32): New function.
+       (bswap32_buf): Removed.
+       (sha256_finish): Use memcpy_bswap32.
+
 2013-01-24  Niibe Yutaka  <gniibe@fsij.org>
 
        * src/sha256.c (v_cycle0): New.  Special case of v_cycle(i,j)
index 80385e9..876ef1b 100644 (file)
 
 #define SHA256_MASK (SHA256_BLOCK_SIZE - 1)
 
-static void bswap32_buf (uint32_t *p, int n)
+static void memcpy_bswap32 (void *dst, const uint32_t *p, int n)
 {
+  uint32_t *q = (uint32_t *)dst;
+
+  n >>= 2;
   while (n--)
-    p[n] = __builtin_bswap32 (p[n]); /* bswap32 is GCC extention */
+    q[n] = __builtin_bswap32 (p[n]); /* bswap32 is GCC extention */
 }
 
 #define rotr32(x,n)   (((x) >> n) | ((x) << (32 - n)))
@@ -88,7 +91,7 @@ static void bswap32_buf (uint32_t *p, int n)
 #define g_1(x)  (rotr32((x), 17) ^ rotr32((x), 19) ^ ((x) >> 10))
 #define k_0     k256
 
-const uint32_t k256[64] = {
+static const uint32_t k256[64] = {
   0X428A2F98, 0X71374491, 0XB5C0FBCF, 0XE9B5DBA5,
   0X3956C25B, 0X59F111F1, 0X923F82A4, 0XAB1C5ED5,
   0XD807AA98, 0X12835B01, 0X243185BE, 0X550C7DC3,
@@ -190,8 +193,7 @@ sha256_finish (sha256_context *ctx, unsigned char output[32])
   ctx->wbuf[15] = __builtin_bswap32 (ctx->total[0] << 3);
   sha256_process (ctx);
 
-  bswap32_buf (ctx->state, SHA256_DIGEST_SIZE >> 2);
-  memcpy (output, ctx->state, SHA256_DIGEST_SIZE);
+  memcpy_bswap32 (output, ctx->state, SHA256_DIGEST_SIZE);
   memset (ctx, 0, sizeof (sha256_context));
 }