mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-24 21:54:01 +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
|
#define SHA256_SUM_LEN 32
|
||||||
|
|
||||||
|
/* Reset watchdog each time we process this many bytes */
|
||||||
|
#define CHUNKSZ_SHA256 (64 * 1024)
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint32_t total[2];
|
uint32_t total[2];
|
||||||
uint32_t state[8];
|
uint32_t state[8];
|
||||||
|
@ -10,7 +13,10 @@ typedef struct {
|
||||||
} sha256_context;
|
} sha256_context;
|
||||||
|
|
||||||
void sha256_starts(sha256_context * ctx);
|
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_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 */
|
#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;
|
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 temp1, temp2;
|
||||||
uint32_t W[64];
|
uint32_t W[64];
|
||||||
|
@ -191,7 +191,7 @@ void sha256_process(sha256_context * ctx, uint8_t data[64])
|
||||||
ctx->state[7] += H;
|
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;
|
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[6], digest, 24);
|
||||||
PUT_UINT32_BE(ctx->state[7], digest, 28);
|
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