The idb contains a flag for the used hash type. Use the flag to
determine the used hash function and update the hash accordingly.

Signed-off-by: Michael Tretter <m.tret...@pengutronix.de>
---
 scripts/rkimage.c | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/scripts/rkimage.c b/scripts/rkimage.c
index 
ba89f32d9376d0153692baa3ddde1c793c1e4cc2..fd97bd1dd9f5967762d0a8bf9d186594a05a2a9f
 100644
--- a/scripts/rkimage.c
+++ b/scripts/rkimage.c
@@ -42,6 +42,17 @@ static void sha512(const void *buf, int len, void *out)
        EVP_MD_CTX_free(md_ctx);
 }
 
+static void idb_hash(struct newidb *idb)
+{
+       unsigned char *idbu8 = (void *)idb;
+       size_t size = 1536;
+
+       if (!!(idb->flags & NEWIDB_FLAGS_SHA256))
+               sha256(idbu8, size, idbu8 + size);
+       else if (!!(idb->flags & NEWIDB_FLAGS_SHA512))
+               sha512(idbu8, size, idbu8 + size);
+}
+
 typedef enum {
        HASH_TYPE_SHA256 = 1,
        HASH_TYPE_SHA512 = 2,
@@ -62,7 +73,6 @@ static int create_newidb(struct newidb *idb)
        bool keep_cert = false;
        int image_offset;
        int i;
-       unsigned char *idbu8 = (void *)idb;
 
        idb->magic = NEWIDB_MAGIC;
        idb->n_files = (n_code << 16) | (1 << 7) | (1 << 8);
@@ -97,10 +107,7 @@ static int create_newidb(struct newidb *idb)
 
        }
 
-       if (hash_type == HASH_TYPE_SHA256)
-               sha256(idbu8, 1536, idbu8 + 1536);
-       else if (hash_type == HASH_TYPE_SHA512)
-               sha512(idbu8, 1536, idbu8 + 1536);
+       idb_hash(idb);
 
        return 0;
 }

-- 
2.39.5


Reply via email to