1 /* 2 * Copyright (c) 2013, Andreas Oetken. 3 * 4 * SPDX-License-Identifier: GPL-2.0+ 5 */ 6 7 #ifndef USE_HOSTCC 8 #include <common.h> 9 #include <fdtdec.h> 10 #include <asm/byteorder.h> 11 #include <linux/errno.h> 12 #include <asm/unaligned.h> 13 #include <hash.h> 14 #else 15 #include "fdt_host.h" 16 #endif 17 #include <u-boot/rsa.h> 18 19 int hash_calculate(const char *name, 20 const struct image_region region[], 21 int region_count, uint8_t *checksum) 22 { 23 struct hash_algo *algo; 24 int ret = 0; 25 void *ctx; 26 uint32_t i; 27 i = 0; 28 29 ret = hash_progressive_lookup_algo(name, &algo); 30 if (ret) 31 return ret; 32 33 ret = algo->hash_init(algo, &ctx); 34 if (ret) 35 return ret; 36 37 for (i = 0; i < region_count - 1; i++) { 38 ret = algo->hash_update(algo, ctx, region[i].data, 39 region[i].size, 0); 40 if (ret) 41 return ret; 42 } 43 44 ret = algo->hash_update(algo, ctx, region[i].data, region[i].size, 1); 45 if (ret) 46 return ret; 47 ret = algo->hash_finish(algo, ctx, checksum, algo->digest_size); 48 if (ret) 49 return ret; 50 51 return 0; 52 } 53