Commit 906a4bb9 authored by Hans de Goede's avatar Hans de Goede Committed by Herbert Xu

crypto: sha256 - Use get/put_unaligned_be32 to get input, memzero_explicit

Use get/put_unaligned_be32 in lib/crypto/sha256.c to load / store data
so that it can be used with unaligned buffers too, making it more generic.

And use memzero_explicit for better clearing of sensitive data.

Note unlike other patches in this series this commit actually makes
functional changes to the sha256 code as used by the purgatory code.

This fully aligns the lib/crypto/sha256.c sha256 implementation with the
one from crypto/sha256_generic.c allowing us to remove the latter in
further patches in this series.
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent ad767ee8
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
#include <linux/bitops.h> #include <linux/bitops.h>
#include <linux/string.h> #include <linux/string.h>
#include <crypto/sha256.h> #include <crypto/sha256.h>
#include <asm/byteorder.h> #include <asm/unaligned.h>
static inline u32 Ch(u32 x, u32 y, u32 z) static inline u32 Ch(u32 x, u32 y, u32 z)
{ {
...@@ -33,7 +33,7 @@ static inline u32 Maj(u32 x, u32 y, u32 z) ...@@ -33,7 +33,7 @@ static inline u32 Maj(u32 x, u32 y, u32 z)
static inline void LOAD_OP(int I, u32 *W, const u8 *input) static inline void LOAD_OP(int I, u32 *W, const u8 *input)
{ {
W[I] = __be32_to_cpu(((__be32 *)(input))[I]); W[I] = get_unaligned_be32((__u32 *)input + I);
} }
static inline void BLEND_OP(int I, u32 *W) static inline void BLEND_OP(int I, u32 *W)
...@@ -201,7 +201,7 @@ static void sha256_transform(u32 *state, const u8 *input) ...@@ -201,7 +201,7 @@ static void sha256_transform(u32 *state, const u8 *input)
/* clear any sensitive info... */ /* clear any sensitive info... */
a = b = c = d = e = f = g = h = t1 = t2 = 0; a = b = c = d = e = f = g = h = t1 = t2 = 0;
memset(W, 0, 64 * sizeof(u32)); memzero_explicit(W, 64 * sizeof(u32));
} }
int sha256_init(struct sha256_state *sctx) int sha256_init(struct sha256_state *sctx)
...@@ -270,7 +270,7 @@ int sha256_final(struct sha256_state *sctx, u8 *out) ...@@ -270,7 +270,7 @@ int sha256_final(struct sha256_state *sctx, u8 *out)
/* Store state in digest */ /* Store state in digest */
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
dst[i] = cpu_to_be32(sctx->state[i]); put_unaligned_be32(sctx->state[i], &dst[i]);
/* Zeroize sensitive information. */ /* Zeroize sensitive information. */
memset(sctx, 0, sizeof(*sctx)); memset(sctx, 0, sizeof(*sctx));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment