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
					
				|  | @ -97,7 +97,7 @@ static int hash_finish_sha256(struct hash_algo *algo, void *ctx, void | |||
| } | ||||
| #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) | ||||
| { | ||||
| 	sha512_context *ctx = malloc(sizeof(sha512_context)); | ||||
|  | @ -125,7 +125,7 @@ static int hash_finish_sha384(struct hash_algo *algo, void *ctx, void | |||
| } | ||||
| #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) | ||||
| { | ||||
| 	sha512_context *ctx = malloc(sizeof(sha512_context)); | ||||
|  | @ -260,10 +260,20 @@ static struct hash_algo hash_algo[] = { | |||
| 		.name		= "sha384", | ||||
| 		.digest_size	= SHA384_SUM_LEN, | ||||
| 		.chunk_size	= CHUNKSZ_SHA384, | ||||
| #ifdef CONFIG_SHA_HW_ACCEL | ||||
| 		.hash_func_ws	= hw_sha384, | ||||
| #else | ||||
| 		.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_update	= hash_update_sha384, | ||||
| 		.hash_finish	= hash_finish_sha384, | ||||
| #endif | ||||
| 	}, | ||||
| #endif | ||||
| #ifdef CONFIG_SHA512 | ||||
|  | @ -271,10 +281,20 @@ static struct hash_algo hash_algo[] = { | |||
| 		.name		= "sha512", | ||||
| 		.digest_size	= SHA512_SUM_LEN, | ||||
| 		.chunk_size	= CHUNKSZ_SHA512, | ||||
| #ifdef CONFIG_SHA_HW_ACCEL | ||||
| 		.hash_func_ws	= hw_sha512, | ||||
| #else | ||||
| 		.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_update	= hash_update_sha512, | ||||
| 		.hash_finish	= hash_finish_sha512, | ||||
| #endif | ||||
| 	}, | ||||
| #endif | ||||
| 	{ | ||||
|  |  | |||
|  | @ -8,6 +8,32 @@ | |||
| #define __HW_SHA_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 | ||||
|  * | ||||
|  |  | |||
							
								
								
									
										15
									
								
								lib/Kconfig
								
								
								
								
							
							
						
						
									
										15
									
								
								lib/Kconfig
								
								
								
								
							|  | @ -391,19 +391,18 @@ config SHA384 | |||
| config SHA_HW_ACCEL | ||||
| 	bool "Enable hashing using hardware" | ||||
| 	help | ||||
| 	  This option enables hardware acceleration | ||||
| 	  for SHA1/SHA256 hashing. | ||||
| 	  This affects the 'hash' command and also the | ||||
| 	  hash_lookup_algo() function. | ||||
| 	  This option enables hardware acceleration for SHA hashing. | ||||
| 	  This affects the 'hash' command and also the hash_lookup_algo() | ||||
| 	  function. | ||||
| 
 | ||||
| config SHA_PROG_HW_ACCEL | ||||
| 	bool "Enable Progressive hashing support using hardware" | ||||
| 	depends on SHA_HW_ACCEL | ||||
| 	help | ||||
| 	  This option enables hardware-acceleration for | ||||
| 	  SHA1/SHA256 progressive hashing. | ||||
| 	  Data can be streamed in a block at a time and the hashing | ||||
| 	  is performed in hardware. | ||||
| 	  This option enables hardware-acceleration for SHA progressive | ||||
| 	  hashing. | ||||
| 	  Data can be streamed in a block at a time and the hashing is | ||||
| 	  performed in hardware. | ||||
| 
 | ||||
| config MD5 | ||||
| 	bool "Support MD5 algorithm" | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue