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 | #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…
	
		Reference in New Issue