mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-19 19:34:35 +00:00
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:
parent
ba13978311
commit
a479f103dc
3 changed files with 55 additions and 10 deletions
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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
|
||||||
*
|
*
|
||||||
|
|
15
lib/Kconfig
15
lib/Kconfig
|
@ -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"
|
||||||
|
|
Loading…
Add table
Reference in a new issue