summaryrefslogtreecommitdiff
path: root/utils/nwztools/upgtools/upg.c
diff options
context:
space:
mode:
Diffstat (limited to 'utils/nwztools/upgtools/upg.c')
-rw-r--r--utils/nwztools/upgtools/upg.c22
1 files changed, 6 insertions, 16 deletions
diff --git a/utils/nwztools/upgtools/upg.c b/utils/nwztools/upgtools/upg.c
index 44d3eca789..8a6a9f0754 100644
--- a/utils/nwztools/upgtools/upg.c
+++ b/utils/nwztools/upgtools/upg.c
@@ -22,7 +22,7 @@
22#include <stdlib.h> 22#include <stdlib.h>
23#include <string.h> 23#include <string.h>
24#include <ctype.h> 24#include <ctype.h>
25#include <openssl/md5.h> 25#include "md5.h"
26 26
27struct nwz_model_t g_model_list[] = 27struct nwz_model_t g_model_list[] =
28{ 28{
@@ -97,19 +97,14 @@ struct upg_file_t *upg_read_memory(void *buf, size_t size, char key[NWZ_KEY_SIZE
97 struct upg_md5_t *md5 = buf; 97 struct upg_md5_t *md5 = buf;
98 cprintf(BLUE, "Preliminary\n"); 98 cprintf(BLUE, "Preliminary\n");
99 cprintf(GREEN, " MD5: "); 99 cprintf(GREEN, " MD5: ");
100 for(int i = 0; i < MD5_DIGEST_LENGTH; i++) 100 for(int i = 0; i < NWZ_MD5_SIZE; i++)
101 cprintf(YELLOW, "%02x", md5->md5[i]); 101 cprintf(YELLOW, "%02x", md5->md5[i]);
102 cprintf(OFF, " "); 102 cprintf(OFF, " ");
103 103
104 /* check MD5 */ 104 /* check MD5 */
105 uint8_t actual_md5[MD5_DIGEST_LENGTH]; 105 uint8_t actual_md5[NWZ_MD5_SIZE];
106 { 106 MD5_CalculateDigest(actual_md5, (md5 + 1), size - sizeof(struct upg_header_t));
107 MD5_CTX c; 107 if(memcmp(actual_md5, md5->md5, NWZ_MD5_SIZE) != 0)
108 MD5_Init(&c);
109 MD5_Update(&c, md5 + 1, size - sizeof(struct upg_header_t));
110 MD5_Final(actual_md5, &c);
111 }
112 if(memcmp(actual_md5, md5->md5, MD5_DIGEST_LENGTH) != 0)
113 { 108 {
114 cprintf(RED, "Mismatch\n"); 109 cprintf(RED, "Mismatch\n");
115 err_printf(GREY, "MD5 Mismatch\n"); 110 err_printf(GREY, "MD5 Mismatch\n");
@@ -223,12 +218,7 @@ void *upg_write_memory(struct upg_file_t *file, char key[NWZ_KEY_SIZE],
223 /* encrypt everything and hash everything */ 218 /* encrypt everything and hash everything */
224 fwp_write(hdr, tot_size - sizeof(*md5), hdr, (void *)key); 219 fwp_write(hdr, tot_size - sizeof(*md5), hdr, (void *)key);
225 /* write final MD5 */ 220 /* write final MD5 */
226 { 221 MD5_CalculateDigest(md5->md5, (void *)hdr, tot_size - sizeof(*md5));
227 MD5_CTX c;
228 MD5_Init(&c);
229 MD5_Update(&c, (void *)hdr, tot_size - sizeof(*md5));
230 MD5_Final(md5->md5, &c);
231 }
232 *out_size = tot_size; 222 *out_size = tot_size;
233 return buf; 223 return buf;
234} 224}