mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 15:14:43 +00:00
sha256: Use const where possible and add watchdog function
In preparation for making the hash function common, we may as well use const where we can. Also add a watchdog version of the hashing function. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
a7d1d76579
commit
ec7381fbf6
2 changed files with 42 additions and 3 deletions
|
@ -3,6 +3,9 @@
|
|||
|
||||
#define SHA256_SUM_LEN 32
|
||||
|
||||
/* Reset watchdog each time we process this many bytes */
|
||||
#define CHUNKSZ_SHA256 (64 * 1024)
|
||||
|
||||
typedef struct {
|
||||
uint32_t total[2];
|
||||
uint32_t state[8];
|
||||
|
@ -10,7 +13,10 @@ typedef struct {
|
|||
} sha256_context;
|
||||
|
||||
void sha256_starts(sha256_context * ctx);
|
||||
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);
|
||||
void sha256_finish(sha256_context * ctx, uint8_t digest[SHA256_SUM_LEN]);
|
||||
|
||||
void sha256_csum_wd(const unsigned char *input, unsigned int ilen,
|
||||
unsigned char *output, unsigned int chunk_sz);
|
||||
|
||||
#endif /* _SHA256_H */
|
||||
|
|
37
lib/sha256.c
37
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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue