Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/common/lib/libc/hash/sha2 Fix unaligned access in *_Final fo...



details:   https://anonhg.NetBSD.org/src/rev/d277408371ba
branches:  trunk
changeset: 751103:d277408371ba
user:      joerg <joerg%NetBSD.org@localhost>
date:      Sun Jan 24 21:11:18 2010 +0000

description:
Fix unaligned access in *_Final for SHA224/SHA256/SHA384.
Remaining part of PR 42273. Tested by snj.

diffstat:

 common/lib/libc/hash/sha2/sha2.c |  12 +++++-------
 1 files changed, 5 insertions(+), 7 deletions(-)

diffs (61 lines):

diff -r 794df03b0ba0 -r d277408371ba common/lib/libc/hash/sha2/sha2.c
--- a/common/lib/libc/hash/sha2/sha2.c  Sun Jan 24 21:05:45 2010 +0000
+++ b/common/lib/libc/hash/sha2/sha2.c  Sun Jan 24 21:11:18 2010 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: sha2.c,v 1.20 2009/11/06 20:31:18 joerg Exp $ */
+/* $NetBSD: sha2.c,v 1.21 2010/01/24 21:11:18 joerg Exp $ */
 /*     $KAME: sha2.c,v 1.9 2003/07/20 00:28:38 itojun Exp $    */
 
 /*
@@ -43,7 +43,7 @@
 #include <sys/cdefs.h>
 
 #if defined(_KERNEL) || defined(_STANDALONE)
-__KERNEL_RCSID(0, "$NetBSD: sha2.c,v 1.20 2009/11/06 20:31:18 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sha2.c,v 1.21 2010/01/24 21:11:18 joerg Exp $");
 
 #include <sys/param.h> /* XXX: to pull <machine/macros.h> for vax memset(9) */
 #include <lib/libkern/libkern.h>
@@ -51,7 +51,7 @@
 #else
 
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: sha2.c,v 1.20 2009/11/06 20:31:18 joerg Exp $");
+__RCSID("$NetBSD: sha2.c,v 1.21 2010/01/24 21:11:18 joerg Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #include "namespace.h"
@@ -555,7 +555,6 @@
 static int
 SHA224_256_Final(uint8_t digest[], SHA256_CTX *context, size_t len)
 {
-       uint32_t        *d = (void *)digest;
        unsigned int    usedspace;
        size_t i;
 
@@ -603,7 +602,7 @@
                SHA256_Transform(context, (uint32_t *)(void *)context->buffer);
 
                for (i = 0; i < len / 4; i++)
-                       d[i] = htobe32(context->state[i]);
+                       be32enc(digest + 4 * i, context->state[i]);
        }
 
        /* Clean up state data: */
@@ -990,7 +989,6 @@
 int
 SHA384_Final(uint8_t digest[], SHA384_CTX *context)
 {
-       uint64_t        *d = (void *)digest;
        size_t i;
 
        /* If no digest buffer is passed, we don't bother doing this: */
@@ -999,7 +997,7 @@
 
                /* Save the hash data for output: */
                for (i = 0; i < 6; ++i)
-                       d[i] = be64toh(context->state[i]);
+                       be64enc(digest + 8 * i, context->state[i]);
        }
 
        /* Zero out state data */



Home | Main Index | Thread Index | Old Index