mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-09 03:21:51 +00:00
mbedtls: add digest shim layer for MbedTLS
Implement digest shim layer on top of MbedTLS crypto library. Introduce <alg>_MBEDTLS kconfig for MbedTLS crypto implementations. Signed-off-by: Raymond Mao <raymond.mao@linaro.org>
This commit is contained in:
parent
988e749d97
commit
bdc3f44a6b
7 changed files with 415 additions and 4 deletions
62
lib/mbedtls/sha256.c
Normal file
62
lib/mbedtls/sha256.c
Normal file
|
@ -0,0 +1,62 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Hash shim layer on MbedTLS Crypto library
|
||||
*
|
||||
* Copyright (c) 2024 Linaro Limited
|
||||
* Author: Raymond Mao <raymond.mao@linaro.org>
|
||||
*/
|
||||
#ifndef USE_HOSTCC
|
||||
#include <cyclic.h>
|
||||
#endif /* USE_HOSTCC */
|
||||
#include <u-boot/sha256.h>
|
||||
|
||||
const u8 sha256_der_prefix[SHA256_DER_LEN] = {
|
||||
0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86,
|
||||
0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05,
|
||||
0x00, 0x04, 0x20
|
||||
};
|
||||
|
||||
void sha256_starts(sha256_context *ctx)
|
||||
{
|
||||
mbedtls_sha256_init(ctx);
|
||||
mbedtls_sha256_starts(ctx, 0);
|
||||
}
|
||||
|
||||
void
|
||||
sha256_update(sha256_context *ctx, const uint8_t *input, uint32_t length)
|
||||
{
|
||||
mbedtls_sha256_update(ctx, input, length);
|
||||
}
|
||||
|
||||
void sha256_finish(sha256_context *ctx, uint8_t digest[SHA256_SUM_LEN])
|
||||
{
|
||||
mbedtls_sha256_finish(ctx, digest);
|
||||
mbedtls_sha256_free(ctx);
|
||||
}
|
||||
|
||||
void sha256_csum_wd(const unsigned char *input, unsigned int ilen,
|
||||
unsigned char *output, unsigned int chunk_sz)
|
||||
{
|
||||
sha256_context ctx;
|
||||
|
||||
sha256_starts(&ctx);
|
||||
|
||||
if (IS_ENABLED(CONFIG_HW_WATCHDOG) || IS_ENABLED(CONFIG_WATCHDOG)) {
|
||||
const unsigned char *curr = input;
|
||||
const unsigned char *end = input + ilen;
|
||||
int chunk;
|
||||
|
||||
while (curr < end) {
|
||||
chunk = end - curr;
|
||||
if (chunk > chunk_sz)
|
||||
chunk = chunk_sz;
|
||||
sha256_update(&ctx, curr, chunk);
|
||||
curr += chunk;
|
||||
schedule();
|
||||
}
|
||||
} else {
|
||||
sha256_update(&ctx, input, ilen);
|
||||
}
|
||||
|
||||
sha256_finish(&ctx, output);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue