hash: Allow for SHA512 hardware implementations

Similar to support for SHA1 and SHA256, allow the use of hardware hashing
engine by enabling the algorithm and setting  CONFIG_SHA_HW_ACCEL /
CONFIG_SHA_PROG_HW_ACCEL.

Signed-off-by: Joel Stanley <joel@jms.id.au>
This commit is contained in:
Joel Stanley 2021-02-17 13:50:42 +10:30 committed by Tom Rini
parent ba13978311
commit a479f103dc
3 changed files with 55 additions and 10 deletions

View File

@ -97,7 +97,7 @@ static int hash_finish_sha256(struct hash_algo *algo, void *ctx, void
} }
#endif #endif
#if defined(CONFIG_SHA384) #if defined(CONFIG_SHA384) && !defined(CONFIG_SHA_PROG_HW_ACCEL)
static int hash_init_sha384(struct hash_algo *algo, void **ctxp) static int hash_init_sha384(struct hash_algo *algo, void **ctxp)
{ {
sha512_context *ctx = malloc(sizeof(sha512_context)); sha512_context *ctx = malloc(sizeof(sha512_context));
@ -125,7 +125,7 @@ static int hash_finish_sha384(struct hash_algo *algo, void *ctx, void
} }
#endif #endif
#if defined(CONFIG_SHA512) #if defined(CONFIG_SHA512) && !defined(CONFIG_SHA_PROG_HW_ACCEL)
static int hash_init_sha512(struct hash_algo *algo, void **ctxp) static int hash_init_sha512(struct hash_algo *algo, void **ctxp)
{ {
sha512_context *ctx = malloc(sizeof(sha512_context)); sha512_context *ctx = malloc(sizeof(sha512_context));
@ -260,10 +260,20 @@ static struct hash_algo hash_algo[] = {
.name = "sha384", .name = "sha384",
.digest_size = SHA384_SUM_LEN, .digest_size = SHA384_SUM_LEN,
.chunk_size = CHUNKSZ_SHA384, .chunk_size = CHUNKSZ_SHA384,
#ifdef CONFIG_SHA_HW_ACCEL
.hash_func_ws = hw_sha384,
#else
.hash_func_ws = sha384_csum_wd, .hash_func_ws = sha384_csum_wd,
#endif
#ifdef CONFIG_SHA_PROG_HW_ACCEL
.hash_init = hw_sha_init,
.hash_update = hw_sha_update,
.hash_finish = hw_sha_finish,
#else
.hash_init = hash_init_sha384, .hash_init = hash_init_sha384,
.hash_update = hash_update_sha384, .hash_update = hash_update_sha384,
.hash_finish = hash_finish_sha384, .hash_finish = hash_finish_sha384,
#endif
}, },
#endif #endif
#ifdef CONFIG_SHA512 #ifdef CONFIG_SHA512
@ -271,10 +281,20 @@ static struct hash_algo hash_algo[] = {
.name = "sha512", .name = "sha512",
.digest_size = SHA512_SUM_LEN, .digest_size = SHA512_SUM_LEN,
.chunk_size = CHUNKSZ_SHA512, .chunk_size = CHUNKSZ_SHA512,
#ifdef CONFIG_SHA_HW_ACCEL
.hash_func_ws = hw_sha512,
#else
.hash_func_ws = sha512_csum_wd, .hash_func_ws = sha512_csum_wd,
#endif
#ifdef CONFIG_SHA_PROG_HW_ACCEL
.hash_init = hw_sha_init,
.hash_update = hw_sha_update,
.hash_finish = hw_sha_finish,
#else
.hash_init = hash_init_sha512, .hash_init = hash_init_sha512,
.hash_update = hash_update_sha512, .hash_update = hash_update_sha512,
.hash_finish = hash_finish_sha512, .hash_finish = hash_finish_sha512,
#endif
}, },
#endif #endif
{ {

View File

@ -8,6 +8,32 @@
#define __HW_SHA_H #define __HW_SHA_H
#include <hash.h> #include <hash.h>
/**
* Computes hash value of input pbuf using h/w acceleration
*
* @param in_addr A pointer to the input buffer
* @param bufleni Byte length of input buffer
* @param out_addr A pointer to the output buffer. When complete
* 64 bytes are copied to pout[0]...pout[63]. Thus, a user
* should allocate at least 64 bytes at pOut in advance.
* @param chunk_size chunk size for sha512
*/
void hw_sha512(const uchar *in_addr, uint buflen, uchar *out_addr,
uint chunk_size);
/**
* Computes hash value of input pbuf using h/w acceleration
*
* @param in_addr A pointer to the input buffer
* @param bufleni Byte length of input buffer
* @param out_addr A pointer to the output buffer. When complete
* 48 bytes are copied to pout[0]...pout[47]. Thus, a user
* should allocate at least 48 bytes at pOut in advance.
* @param chunk_size chunk size for sha384
*/
void hw_sha384(const uchar *in_addr, uint buflen, uchar *out_addr,
uint chunk_size);
/** /**
* Computes hash value of input pbuf using h/w acceleration * Computes hash value of input pbuf using h/w acceleration
* *

View File

@ -391,19 +391,18 @@ config SHA384
config SHA_HW_ACCEL config SHA_HW_ACCEL
bool "Enable hashing using hardware" bool "Enable hashing using hardware"
help help
This option enables hardware acceleration This option enables hardware acceleration for SHA hashing.
for SHA1/SHA256 hashing. This affects the 'hash' command and also the hash_lookup_algo()
This affects the 'hash' command and also the function.
hash_lookup_algo() function.
config SHA_PROG_HW_ACCEL config SHA_PROG_HW_ACCEL
bool "Enable Progressive hashing support using hardware" bool "Enable Progressive hashing support using hardware"
depends on SHA_HW_ACCEL depends on SHA_HW_ACCEL
help help
This option enables hardware-acceleration for This option enables hardware-acceleration for SHA progressive
SHA1/SHA256 progressive hashing. hashing.
Data can be streamed in a block at a time and the hashing Data can be streamed in a block at a time and the hashing is
is performed in hardware. performed in hardware.
config MD5 config MD5
bool "Support MD5 algorithm" bool "Support MD5 algorithm"