summaryrefslogtreecommitdiff
path: root/lib/hash-checksum.c
diff options
context:
space:
mode:
authorAlexandru Gagniuc <mr.nuke.me@gmail.com>2021-02-19 12:45:10 -0600
committerTom Rini <trini@konsulko.com>2021-04-14 15:06:08 -0400
commit0bcb28dfb946b32ed7550fc4c24c5dcea6718554 (patch)
treed54d4cda64bf44ce534d03d26ae3913f1a957746 /lib/hash-checksum.c
parent3505fa572793d50f7ae53a46630cf5976b69e700 (diff)
downloadu-boot-0bcb28dfb946b32ed7550fc4c24c5dcea6718554.tar.gz
u-boot-0bcb28dfb946b32ed7550fc4c24c5dcea6718554.tar.bz2
u-boot-0bcb28dfb946b32ed7550fc4c24c5dcea6718554.zip
lib: Rename rsa-checksum.c to hash-checksum.c
rsa-checksum.c sontains the hash_calculate() implementations. Despite the "rsa-" file prefix, this function is useful for other algorithms. To prevent confusion, move this file to lib/, and rename it to hash-checksum.c, to give it a more "generic" feel. Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'lib/hash-checksum.c')
-rw-r--r--lib/hash-checksum.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/lib/hash-checksum.c b/lib/hash-checksum.c
new file mode 100644
index 0000000000..d732ecc38f
--- /dev/null
+++ b/lib/hash-checksum.c
@@ -0,0 +1,52 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (c) 2013, Andreas Oetken.
+ */
+
+#ifndef USE_HOSTCC
+#include <common.h>
+#include <fdtdec.h>
+#include <asm/byteorder.h>
+#include <linux/errno.h>
+#include <asm/unaligned.h>
+#include <hash.h>
+#else
+#include "fdt_host.h"
+#endif
+#include <hash.h>
+#include <image.h>
+
+int hash_calculate(const char *name,
+ const struct image_region region[],
+ int region_count, uint8_t *checksum)
+{
+ struct hash_algo *algo;
+ int ret = 0;
+ void *ctx;
+ uint32_t i;
+ i = 0;
+
+ ret = hash_progressive_lookup_algo(name, &algo);
+ if (ret)
+ return ret;
+
+ ret = algo->hash_init(algo, &ctx);
+ if (ret)
+ return ret;
+
+ for (i = 0; i < region_count - 1; i++) {
+ ret = algo->hash_update(algo, ctx, region[i].data,
+ region[i].size, 0);
+ if (ret)
+ return ret;
+ }
+
+ ret = algo->hash_update(algo, ctx, region[i].data, region[i].size, 1);
+ if (ret)
+ return ret;
+ ret = algo->hash_finish(algo, ctx, checksum, algo->digest_size);
+ if (ret)
+ return ret;
+
+ return 0;
+}