Use --m32 and --m64 parameters also in HMAC signing code
authorDmitry Kasatkin <d.kasatkin@samsung.com>
Fri, 14 Feb 2014 11:31:08 +0000 (13:31 +0200)
committerDmitry Kasatkin <d.kasatkin@samsung.com>
Mon, 17 Feb 2014 13:56:07 +0000 (15:56 +0200)
Signed-off-by: Dmitry Kasatkin <d.kasatkin@samsung.com>
src/evmctl.c
src/libevm.h

index 696419a..e5c9357 100644 (file)
@@ -933,6 +933,8 @@ static int calc_evm_hmac(const char *file, const char *keyfile, unsigned char *h
        unsigned char evmkey[MAX_KEY_SIZE];
        char list[1024];
        ssize_t list_size;
+       struct h_misc_64 hmac_misc;
+       int hmac_size;
 
        key = file2bin(keyfile, NULL, &keylen);
        if (!key) {
@@ -1004,13 +1006,37 @@ static int calc_evm_hmac(const char *file, const char *keyfile, unsigned char *h
        }
 
        memset(&hmac_misc, 0, sizeof(hmac_misc));
-       hmac_misc.ino = st.st_ino;
-       hmac_misc.generation = generation;
-       hmac_misc.uid = st.st_uid;
-       hmac_misc.gid = st.st_gid;
-       hmac_misc.mode = st.st_mode;
 
-       err = !HMAC_Update(&ctx, (const unsigned char *)&hmac_misc, sizeof(hmac_misc));
+       if (msize == 0) {
+               struct h_misc *hmac = (struct h_misc *)&hmac_misc;
+               hmac_size = sizeof(*hmac);
+               hmac->ino = st.st_ino;
+               hmac->generation = generation;
+               hmac->uid = st.st_uid;
+               hmac->gid = st.st_gid;
+               hmac->mode = st.st_mode;
+       } else if (msize == 64) {
+               struct h_misc_64 *hmac = (struct h_misc_64 *)&hmac_misc;
+               hmac_size = sizeof(*hmac);
+               hmac->ino = st.st_ino;
+               hmac->generation = generation;
+               hmac->uid = st.st_uid;
+               hmac->gid = st.st_gid;
+               hmac->mode = st.st_mode;
+       } else {
+               struct h_misc_32 *hmac = (struct h_misc_32 *)&hmac_misc;
+               hmac_size = sizeof(*hmac);
+               hmac->ino = st.st_ino;
+               hmac->generation = generation;
+               hmac->uid = st.st_uid;
+               hmac->gid = st.st_gid;
+               hmac->mode = st.st_mode;
+       }
+
+       log_debug("hmac_misc (%d): ", hmac_size);
+       log_debug_dump(&hmac_misc, hmac_size);
+
+       err = !HMAC_Update(&ctx, (const unsigned char *)&hmac_misc, hmac_size);
        if (err) {
                log_err("HMAC_Update() failed\n");
                goto out_ctx_cleanup;
index a3d57b3..a9e91dc 100644 (file)
@@ -63,7 +63,7 @@ struct h_misc {
        uid_t uid;
        gid_t gid;
        unsigned short mode;
-} hmac_misc;
+};
 
 struct h_misc_32 {
        uint32_t ino;