diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/sha1.c | 19 | ||||
| -rw-r--r-- | lib/sha256.c | 37 | ||||
| -rw-r--r-- | lib/string.c | 16 | 
3 files changed, 58 insertions, 14 deletions
diff --git a/lib/sha1.c b/lib/sha1.c index da5bc16f3..a12122485 100644 --- a/lib/sha1.c +++ b/lib/sha1.c @@ -73,7 +73,7 @@ void sha1_starts (sha1_context * ctx)  	ctx->state[4] = 0xC3D2E1F0;  } -static void sha1_process (sha1_context * ctx, unsigned char data[64]) +static void sha1_process(sha1_context *ctx, const unsigned char data[64])  {  	unsigned long temp, W[16], A, B, C, D, E; @@ -230,7 +230,8 @@ static void sha1_process (sha1_context * ctx, unsigned char data[64])  /*   * SHA-1 process buffer   */ -void sha1_update (sha1_context * ctx, unsigned char *input, int ilen) +void sha1_update(sha1_context *ctx, const unsigned char *input, +		 unsigned int ilen)  {  	int fill;  	unsigned long left; @@ -305,7 +306,8 @@ void sha1_finish (sha1_context * ctx, unsigned char output[20])  /*   * Output = SHA-1( input buffer )   */ -void sha1_csum (unsigned char *input, int ilen, unsigned char output[20]) +void sha1_csum(const unsigned char *input, unsigned int ilen, +	       unsigned char *output)  {  	sha1_context ctx; @@ -318,12 +320,12 @@ void sha1_csum (unsigned char *input, int ilen, unsigned char output[20])   * Output = SHA-1( input buffer ). Trigger the watchdog every 'chunk_sz'   * bytes of input processed.   */ -void sha1_csum_wd (unsigned char *input, int ilen, unsigned char output[20], -			unsigned int chunk_sz) +void sha1_csum_wd(const unsigned char *input, unsigned int ilen, +		  unsigned char *output, unsigned int chunk_sz)  {  	sha1_context ctx;  #if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG) -	unsigned char *end, *curr; +	const unsigned char *end, *curr;  	int chunk;  #endif @@ -350,8 +352,9 @@ void sha1_csum_wd (unsigned char *input, int ilen, unsigned char output[20],  /*   * Output = HMAC-SHA-1( input buffer, hmac key )   */ -void sha1_hmac (unsigned char *key, int keylen, -		unsigned char *input, int ilen, unsigned char output[20]) +void sha1_hmac(const unsigned char *key, int keylen, +	       const unsigned char *input, unsigned int ilen, +	       unsigned char *output)  {  	int i;  	sha1_context ctx; diff --git a/lib/sha256.c b/lib/sha256.c index deb63a40b..ab2db4890 100644 --- a/lib/sha256.c +++ b/lib/sha256.c @@ -60,7 +60,7 @@ void sha256_starts(sha256_context * ctx)  	ctx->state[7] = 0x5BE0CD19;  } -void sha256_process(sha256_context * ctx, uint8_t data[64]) +static void sha256_process(sha256_context *ctx, const uint8_t data[64])  {  	uint32_t temp1, temp2;  	uint32_t W[64]; @@ -191,7 +191,7 @@ void sha256_process(sha256_context * ctx, uint8_t data[64])  	ctx->state[7] += H;  } -void sha256_update(sha256_context * ctx, uint8_t * input, uint32_t length) +void sha256_update(sha256_context *ctx, const uint8_t *input, uint32_t length)  {  	uint32_t left, fill; @@ -260,3 +260,36 @@ void sha256_finish(sha256_context * ctx, uint8_t digest[32])  	PUT_UINT32_BE(ctx->state[6], digest, 24);  	PUT_UINT32_BE(ctx->state[7], digest, 28);  } + +/* + * Output = SHA-256( input buffer ). Trigger the watchdog every 'chunk_sz' + * bytes of input processed. + */ +void sha256_csum_wd(const unsigned char *input, unsigned int ilen, +		unsigned char *output, unsigned int chunk_sz) +{ +	sha256_context ctx; +#if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG) +	unsigned char *end, *curr; +	int chunk; +#endif + +	sha256_starts(&ctx); + +#if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG) +	curr = input; +	end = input + ilen; +	while (curr < end) { +		chunk = end - curr; +		if (chunk > chunk_sz) +			chunk = chunk_sz; +		sha256_update(&ctx, curr, chunk); +		curr += chunk; +		WATCHDOG_RESET(); +	} +#else +	sha256_update(&ctx, input, ilen); +#endif + +	sha256_finish(&ctx, output); +} diff --git a/lib/string.c b/lib/string.c index c3ad055e2..68f60bea1 100644 --- a/lib/string.c +++ b/lib/string.c @@ -21,14 +21,13 @@  #include <malloc.h> -#if 0 /* not used - was: #ifndef __HAVE_ARCH_STRNICMP */  /** - * strnicmp - Case insensitive, length-limited string comparison + * strncasecmp - Case insensitive, length-limited string comparison   * @s1: One string   * @s2: The other string   * @len: the maximum number of characters to compare   */ -int strnicmp(const char *s1, const char *s2, size_t len) +int strncasecmp(const char *s1, const char *s2, size_t len)  {  	/* Yes, Virginia, it had better be unsigned */  	unsigned char c1, c2; @@ -52,7 +51,16 @@ int strnicmp(const char *s1, const char *s2, size_t len)  	}  	return (int)c1 - (int)c2;  } -#endif + +/** + * strcasecmp - Case insensitive string comparison + * @s1: One string + * @s2: The other string + */ +int strcasecmp(const char *s1, const char *s2) +{ +	return strncasecmp(s1, s2, -1U); +}  char * ___strtok;  |