summaryrefslogtreecommitdiff
path: root/utils/imxtools/sbtools
diff options
context:
space:
mode:
Diffstat (limited to 'utils/imxtools/sbtools')
-rw-r--r--utils/imxtools/sbtools/crc.c4
-rw-r--r--utils/imxtools/sbtools/crypto.cpp28
-rw-r--r--utils/imxtools/sbtools/crypto.h22
-rw-r--r--utils/imxtools/sbtools/dbparser.c2
-rw-r--r--utils/imxtools/sbtools/misc.c8
-rw-r--r--utils/imxtools/sbtools/misc.h5
-rw-r--r--utils/imxtools/sbtools/sb.c68
7 files changed, 68 insertions, 69 deletions
diff --git a/utils/imxtools/sbtools/crc.c b/utils/imxtools/sbtools/crc.c
index eaf257ddfe..9f7146881b 100644
--- a/utils/imxtools/sbtools/crc.c
+++ b/utils/imxtools/sbtools/crc.c
@@ -68,12 +68,12 @@ static uint32_t crc_table[256] = {
68 0x0B8757BDA, 0x0B5365D03, 0x0B1F740B4 68 0x0B8757BDA, 0x0B5365D03, 0x0B1F740B4
69}; 69};
70 70
71uint32_t crc(byte *data, int size) 71uint32_t crc(uint8_t *data, int size)
72{ 72{
73 return crc_continue(0xffffffff, data, size); 73 return crc_continue(0xffffffff, data, size);
74} 74}
75 75
76uint32_t crc_continue(uint32_t previous_crc, byte *data, int size) 76uint32_t crc_continue(uint32_t previous_crc, uint8_t *data, int size)
77{ 77{
78 uint32_t c = previous_crc; 78 uint32_t c = previous_crc;
79 /* normal CRC */ 79 /* normal CRC */
diff --git a/utils/imxtools/sbtools/crypto.cpp b/utils/imxtools/sbtools/crypto.cpp
index d7ef04f098..5563fcfd3b 100644
--- a/utils/imxtools/sbtools/crypto.cpp
+++ b/utils/imxtools/sbtools/crypto.cpp
@@ -30,19 +30,19 @@ namespace
30{ 30{
31 31
32enum crypto_method_t g_cur_method = CRYPTO_NONE; 32enum crypto_method_t g_cur_method = CRYPTO_NONE;
33byte g_key[16]; 33uint8_t g_key[16];
34CBC_Mode<AES>::Encryption g_aes_enc; 34CBC_Mode<AES>::Encryption g_aes_enc;
35CBC_Mode<AES>::Decryption g_aes_dec; 35CBC_Mode<AES>::Decryption g_aes_dec;
36bool g_aes_enc_key_dirty; /* true of g_aes_enc key needs to be updated */ 36bool g_aes_enc_key_dirty; /* true of g_aes_enc key needs to be updated */
37bool g_aes_dec_key_dirty; /* same for g_aes_dec */ 37bool g_aes_dec_key_dirty; /* same for g_aes_dec */
38 38
39int cbc_mac2( 39int cbc_mac2(
40 const byte *in_data, /* Input data */ 40 const uint8_t *in_data, /* Input data */
41 byte *out_data, /* Output data (or NULL) */ 41 uint8_t *out_data, /* Output data (or NULL) */
42 int nr_blocks, /* Number of blocks to encrypt/decrypt (one block=16 bytes) */ 42 int nr_blocks, /* Number of blocks to encrypt/decrypt (one block=16 bytes) */
43 byte key[16], /* Key */ 43 uint8_t key[16], /* Key */
44 byte iv[16], /* Initialisation Vector */ 44 uint8_t iv[16], /* Initialisation Vector */
45 byte (*out_cbc_mac)[16], /* CBC-MAC of the result (or NULL) */ 45 uint8_t (*out_cbc_mac)[16], /* CBC-MAC of the result (or NULL) */
46 bool encrypt /* 1 to encrypt, 0 to decrypt */ 46 bool encrypt /* 1 to encrypt, 0 to decrypt */
47 ) 47 )
48{ 48{
@@ -58,10 +58,10 @@ int cbc_mac2(
58 g_aes_enc_key_dirty = false; 58 g_aes_enc_key_dirty = false;
59 } 59 }
60 g_aes_enc.Resynchronize(iv, 16); 60 g_aes_enc.Resynchronize(iv, 16);
61 byte tmp[16]; 61 uint8_t tmp[16];
62 /* we need some output buffer, either a temporary one if we are CBC-MACing 62 /* we need some output buffer, either a temporary one if we are CBC-MACing
63 * only, or use output buffer if available */ 63 * only, or use output buffer if available */
64 byte *out_ptr = (out_data == NULL) ? tmp : out_data; 64 uint8_t *out_ptr = (out_data == NULL) ? tmp : out_data;
65 while(nr_blocks-- > 0) 65 while(nr_blocks-- > 0)
66 { 66 {
67 g_aes_enc.ProcessData(out_ptr, in_data, 16); 67 g_aes_enc.ProcessData(out_ptr, in_data, 16);
@@ -113,11 +113,11 @@ int crypto_setup(struct crypto_key_t *key)
113} 113}
114 114
115int crypto_apply( 115int crypto_apply(
116 byte *in_data, /* Input data */ 116 uint8_t *in_data, /* Input data */
117 byte *out_data, /* Output data (or NULL) */ 117 uint8_t *out_data, /* Output data (or NULL) */
118 int nr_blocks, /* Number of blocks (one block=16 bytes) */ 118 int nr_blocks, /* Number of blocks (one block=16 bytes) */
119 byte iv[16], /* Key */ 119 uint8_t iv[16], /* Key */
120 byte (*out_cbc_mac)[16], /* CBC-MAC of the result (or NULL) */ 120 uint8_t (*out_cbc_mac)[16], /* CBC-MAC of the result (or NULL) */
121 bool encrypt) 121 bool encrypt)
122{ 122{
123 if(g_cur_method == CRYPTO_KEY) 123 if(g_cur_method == CRYPTO_KEY)
@@ -131,7 +131,7 @@ void sha_1_init(struct sha_1_params_t *params)
131 params->object = new SHA1; 131 params->object = new SHA1;
132} 132}
133 133
134void sha_1_update(struct sha_1_params_t *params, byte *buffer, int size) 134void sha_1_update(struct sha_1_params_t *params, uint8_t *buffer, int size)
135{ 135{
136 reinterpret_cast<SHA1 *>(params->object)->Update(buffer, size); 136 reinterpret_cast<SHA1 *>(params->object)->Update(buffer, size);
137} 137}
@@ -143,7 +143,7 @@ void sha_1_finish(struct sha_1_params_t *params)
143 delete obj; 143 delete obj;
144} 144}
145 145
146void sha_1_output(struct sha_1_params_t *params, byte *out) 146void sha_1_output(struct sha_1_params_t *params, uint8_t *out)
147{ 147{
148 memcpy(out, params->hash, 20); 148 memcpy(out, params->hash, 20);
149} 149}
diff --git a/utils/imxtools/sbtools/crypto.h b/utils/imxtools/sbtools/crypto.h
index 169197790b..bdb94bb881 100644
--- a/utils/imxtools/sbtools/crypto.h
+++ b/utils/imxtools/sbtools/crypto.h
@@ -30,8 +30,6 @@
30extern "C" { 30extern "C" {
31#endif 31#endif
32 32
33typedef uint8_t byte;
34
35/* crypto.cpp */ 33/* crypto.cpp */
36enum crypto_method_t 34enum crypto_method_t
37{ 35{
@@ -52,7 +50,7 @@ struct crypto_key_t
52 enum crypto_method_t method; 50 enum crypto_method_t method;
53 union 51 union
54 { 52 {
55 byte key[16]; 53 uint8_t key[16];
56 union xorcrypt_key_t xor_key[2]; 54 union xorcrypt_key_t xor_key[2];
57 }u; 55 }u;
58}; 56};
@@ -68,28 +66,28 @@ int crypto_setup(struct crypto_key_t *key);
68 66
69/* return 0 on success, <0 on error */ 67/* return 0 on success, <0 on error */
70int crypto_apply( 68int crypto_apply(
71 byte *in_data, /* Input data */ 69 uint8_t *in_data, /* Input data */
72 byte *out_data, /* Output data (or NULL) */ 70 uint8_t *out_data, /* Output data (or NULL) */
73 int nr_blocks, /* Number of blocks (one block=16 bytes) */ 71 int nr_blocks, /* Number of blocks (one block=16 bytes) */
74 byte iv[16], /* IV */ 72 uint8_t iv[16], /* IV */
75 byte (*out_cbc_mac)[16], /* CBC-MAC of the result (or NULL) */ 73 uint8_t (*out_cbc_mac)[16], /* CBC-MAC of the result (or NULL) */
76 bool encrypt); 74 bool encrypt);
77 75
78/* crc.c */ 76/* crc.c */
79uint32_t crc(byte *data, int size); 77uint32_t crc(uint8_t *data, int size);
80uint32_t crc_continue(uint32_t previous_crc, byte *data, int size); 78uint32_t crc_continue(uint32_t previous_crc, uint8_t *data, int size);
81 79
82/* sha1.c */ 80/* sha1.c */
83struct sha_1_params_t 81struct sha_1_params_t
84{ 82{
85 byte hash[20]; /* final hash */ 83 uint8_t hash[20]; /* final hash */
86 void *object; /* pointer to CryptoPP::SHA1 object */ 84 void *object; /* pointer to CryptoPP::SHA1 object */
87}; 85};
88 86
89void sha_1_init(struct sha_1_params_t *params); 87void sha_1_init(struct sha_1_params_t *params);
90void sha_1_update(struct sha_1_params_t *params, byte *buffer, int size); 88void sha_1_update(struct sha_1_params_t *params, uint8_t *buffer, int size);
91void sha_1_finish(struct sha_1_params_t *params); 89void sha_1_finish(struct sha_1_params_t *params);
92void sha_1_output(struct sha_1_params_t *params, byte *out); 90void sha_1_output(struct sha_1_params_t *params, uint8_t *out);
93 91
94/* xorcrypt.c */ 92/* xorcrypt.c */
95 93
diff --git a/utils/imxtools/sbtools/dbparser.c b/utils/imxtools/sbtools/dbparser.c
index 1e5ee7244a..cfec7c2cd5 100644
--- a/utils/imxtools/sbtools/dbparser.c
+++ b/utils/imxtools/sbtools/dbparser.c
@@ -207,7 +207,7 @@ static void parse_number(struct context_t *ctx, struct lexem_t *lexem)
207 { 207 {
208 if(base == 10 && !isdigit(cur_char(ctx))) 208 if(base == 10 && !isdigit(cur_char(ctx)))
209 break; 209 break;
210 byte v; 210 uint8_t v;
211 if(convxdigit(cur_char(ctx), &v)) 211 if(convxdigit(cur_char(ctx), &v))
212 break; 212 break;
213 lexem->num = base * lexem->num + v; 213 lexem->num = base * lexem->num + v;
diff --git a/utils/imxtools/sbtools/misc.c b/utils/imxtools/sbtools/misc.c
index 6216ae612b..c5832b6bb9 100644
--- a/utils/imxtools/sbtools/misc.c
+++ b/utils/imxtools/sbtools/misc.c
@@ -58,7 +58,7 @@ void *xmalloc(size_t s)
58 return r; 58 return r;
59} 59}
60 60
61int convxdigit(char digit, byte *val) 61int convxdigit(char digit, uint8_t *val)
62{ 62{
63 if(digit >= '0' && digit <= '9') 63 if(digit >= '0' && digit <= '9')
64 { 64 {
@@ -127,7 +127,7 @@ bool parse_key(char **pstr, struct crypto_key_t *key)
127 { 127 {
128 for(int j = 0; j < 128; j++) 128 for(int j = 0; j < 128; j++)
129 { 129 {
130 byte a, b; 130 uint8_t a, b;
131 if(convxdigit(str[2 * j], &a) || convxdigit(str[2 * j + 1], &b)) 131 if(convxdigit(str[2 * j], &a) || convxdigit(str[2 * j + 1], &b))
132 return false; 132 return false;
133 key->u.xor_key[j / 64].key[j % 64] = (a << 4) | b; 133 key->u.xor_key[j / 64].key[j % 64] = (a << 4) | b;
@@ -143,7 +143,7 @@ bool parse_key(char **pstr, struct crypto_key_t *key)
143 return false; 143 return false;
144 for(int j = 0; j < 16; j++) 144 for(int j = 0; j < 16; j++)
145 { 145 {
146 byte a, b; 146 uint8_t a, b;
147 if(convxdigit(str[2 * j], &a) || convxdigit(str[2 * j + 1], &b)) 147 if(convxdigit(str[2 * j], &a) || convxdigit(str[2 * j + 1], &b))
148 return false; 148 return false;
149 key->u.key[j] = (a << 4) | b; 149 key->u.key[j] = (a << 4) | b;
@@ -243,7 +243,7 @@ bool add_keys_from_file(const char *key_file)
243 return true; 243 return true;
244} 244}
245 245
246void print_hex(void *user, misc_printf_t printf, byte *data, int len, bool newline) 246void print_hex(void *user, misc_printf_t printf, uint8_t *data, int len, bool newline)
247{ 247{
248 for(int i = 0; i < len; i++) 248 for(int i = 0; i < len; i++)
249 printf(user, "%02X ", data[i]); 249 printf(user, "%02X ", data[i]);
diff --git a/utils/imxtools/sbtools/misc.h b/utils/imxtools/sbtools/misc.h
index 5c6b2fc007..65386a728f 100644
--- a/utils/imxtools/sbtools/misc.h
+++ b/utils/imxtools/sbtools/misc.h
@@ -22,6 +22,7 @@
22#define __MISC_H__ 22#define __MISC_H__
23 23
24#include <stdbool.h> 24#include <stdbool.h>
25#include <stdint.h>
25#include "crypto.h" 26#include "crypto.h"
26 27
27#define _STR(a) #a 28#define _STR(a) #a
@@ -53,8 +54,8 @@ void augment_array_ex(void **arr, size_t elem_sz, int *cnt, int *capacity,
53 void *aug, int aug_cnt); 54 void *aug, int aug_cnt);
54void generate_random_data(void *buf, size_t sz); 55void generate_random_data(void *buf, size_t sz);
55void *xmalloc(size_t s); 56void *xmalloc(size_t s);
56int convxdigit(char digit, byte *val); 57int convxdigit(char digit, uint8_t *val);
57void print_hex(void *user, misc_printf_t printf, byte *data, int len, bool newline); 58void print_hex(void *user, misc_printf_t printf, uint8_t *data, int len, bool newline);
58void add_keys(key_array_t ka, int kac); 59void add_keys(key_array_t ka, int kac);
59bool parse_key(char **str, struct crypto_key_t *key); 60bool parse_key(char **str, struct crypto_key_t *key);
60bool add_keys_from_file(const char *key_file); 61bool add_keys_from_file(const char *key_file);
diff --git a/utils/imxtools/sbtools/sb.c b/utils/imxtools/sbtools/sb.c
index cbeacf9c3f..04acc2a6ad 100644
--- a/utils/imxtools/sbtools/sb.c
+++ b/utils/imxtools/sbtools/sb.c
@@ -223,7 +223,7 @@ static void produce_sb_section_header(struct sb_section_t *sec,
223static uint8_t instruction_checksum(struct sb_instruction_header_t *hdr) 223static uint8_t instruction_checksum(struct sb_instruction_header_t *hdr)
224{ 224{
225 uint8_t sum = 90; 225 uint8_t sum = 90;
226 byte *ptr = (byte *)hdr; 226 uint8_t *ptr = (uint8_t *)hdr;
227 for(int i = 1; i < 16; i++) 227 for(int i = 1; i < 16; i++)
228 sum += ptr[i]; 228 sum += ptr[i];
229 return sum; 229 return sum;
@@ -287,8 +287,8 @@ enum sb_error_t sb_write_file(struct sb_file_t *sb, const char *filename, void *
287 #define printf(c, ...) cprintf(u, false, c, __VA_ARGS__) 287 #define printf(c, ...) cprintf(u, false, c, __VA_ARGS__)
288 struct crypto_key_t real_key; 288 struct crypto_key_t real_key;
289 real_key.method = CRYPTO_KEY; 289 real_key.method = CRYPTO_KEY;
290 byte crypto_iv[16]; 290 uint8_t crypto_iv[16];
291 byte (*cbc_macs)[16] = xmalloc(16 * g_nr_keys); 291 uint8_t (*cbc_macs)[16] = xmalloc(16 * g_nr_keys);
292 /* init CBC-MACs */ 292 /* init CBC-MACs */
293 for(int i = 0; i < g_nr_keys; i++) 293 for(int i = 0; i < g_nr_keys; i++)
294 memset(cbc_macs[i], 0, 16); 294 memset(cbc_macs[i], 0, 16);
@@ -319,8 +319,8 @@ enum sb_error_t sb_write_file(struct sb_file_t *sb, const char *filename, void *
319 struct sb_header_t sb_hdr; 319 struct sb_header_t sb_hdr;
320 produce_sb_header(sb, &sb_hdr); 320 produce_sb_header(sb, &sb_hdr);
321 /* allocate image */ 321 /* allocate image */
322 byte *buf = xmalloc(sb_hdr.image_size * BLOCK_SIZE); 322 uint8_t *buf = xmalloc(sb_hdr.image_size * BLOCK_SIZE);
323 byte *buf_p = buf; 323 uint8_t *buf_p = buf;
324 #define write(p, sz) do { memcpy(buf_p, p, sz); buf_p += sz; } while(0) 324 #define write(p, sz) do { memcpy(buf_p, p, sz); buf_p += sz; } while(0)
325 #define check_crypto(expr) \ 325 #define check_crypto(expr) \
326 do { int err = expr; \ 326 do { int err = expr; \
@@ -329,7 +329,7 @@ enum sb_error_t sb_write_file(struct sb_file_t *sb, const char *filename, void *
329 cprintf(u, true, GREY, "Crypto error: %d\n", err); \ 329 cprintf(u, true, GREY, "Crypto error: %d\n", err); \
330 return SB_CRYPTO_ERROR; } } while(0) 330 return SB_CRYPTO_ERROR; } } while(0)
331 331
332 sha_1_update(&file_sha1, (byte *)&sb_hdr, sizeof(sb_hdr)); 332 sha_1_update(&file_sha1, (uint8_t *)&sb_hdr, sizeof(sb_hdr));
333 write(&sb_hdr, sizeof(sb_hdr)); 333 write(&sb_hdr, sizeof(sb_hdr));
334 334
335 memcpy(crypto_iv, &sb_hdr, 16); 335 memcpy(crypto_iv, &sb_hdr, 16);
@@ -338,7 +338,7 @@ enum sb_error_t sb_write_file(struct sb_file_t *sb, const char *filename, void *
338 for(int i = 0; i < g_nr_keys; i++) 338 for(int i = 0; i < g_nr_keys; i++)
339 { 339 {
340 check_crypto(crypto_setup(&g_key_array[i])); 340 check_crypto(crypto_setup(&g_key_array[i]));
341 check_crypto(crypto_apply((byte *)&sb_hdr, NULL, sizeof(sb_hdr) / BLOCK_SIZE, 341 check_crypto(crypto_apply((uint8_t *)&sb_hdr, NULL, sizeof(sb_hdr) / BLOCK_SIZE,
342 cbc_macs[i], &cbc_macs[i], true)); 342 cbc_macs[i], &cbc_macs[i], true));
343 } 343 }
344 344
@@ -347,13 +347,13 @@ enum sb_error_t sb_write_file(struct sb_file_t *sb, const char *filename, void *
347 { 347 {
348 struct sb_section_header_t sb_sec_hdr; 348 struct sb_section_header_t sb_sec_hdr;
349 produce_sb_section_header(&sb->sections[i], &sb_sec_hdr); 349 produce_sb_section_header(&sb->sections[i], &sb_sec_hdr);
350 sha_1_update(&file_sha1, (byte *)&sb_sec_hdr, sizeof(sb_sec_hdr)); 350 sha_1_update(&file_sha1, (uint8_t *)&sb_sec_hdr, sizeof(sb_sec_hdr));
351 write(&sb_sec_hdr, sizeof(sb_sec_hdr)); 351 write(&sb_sec_hdr, sizeof(sb_sec_hdr));
352 /* update CBC-MACs */ 352 /* update CBC-MACs */
353 for(int j = 0; j < g_nr_keys; j++) 353 for(int j = 0; j < g_nr_keys; j++)
354 { 354 {
355 check_crypto(crypto_setup(&g_key_array[j])); 355 check_crypto(crypto_setup(&g_key_array[j]));
356 check_crypto(crypto_apply((byte *)&sb_sec_hdr, NULL, 356 check_crypto(crypto_apply((uint8_t *)&sb_sec_hdr, NULL,
357 sizeof(sb_sec_hdr) / BLOCK_SIZE, cbc_macs[j], &cbc_macs[j], true)); 357 sizeof(sb_sec_hdr) / BLOCK_SIZE, cbc_macs[j], &cbc_macs[j], true));
358 } 358 }
359 } 359 }
@@ -365,7 +365,7 @@ enum sb_error_t sb_write_file(struct sb_file_t *sb, const char *filename, void *
365 check_crypto(crypto_setup(&g_key_array[i])); 365 check_crypto(crypto_setup(&g_key_array[i]));
366 check_crypto(crypto_apply(real_key.u.key, entry.key, 1, crypto_iv, NULL, true)); 366 check_crypto(crypto_apply(real_key.u.key, entry.key, 1, crypto_iv, NULL, true));
367 write(&entry, sizeof(entry)); 367 write(&entry, sizeof(entry));
368 sha_1_update(&file_sha1, (byte *)&entry, sizeof(entry)); 368 sha_1_update(&file_sha1, (uint8_t *)&entry, sizeof(entry));
369 } 369 }
370 370
371 /* HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK */ 371 /* HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK */
@@ -391,7 +391,7 @@ enum sb_error_t sb_write_file(struct sb_file_t *sb, const char *filename, void *
391 unsigned init_gap = (sb->sections[0].file_offset - 1) * BLOCK_SIZE - (buf_p - buf); 391 unsigned init_gap = (sb->sections[0].file_offset - 1) * BLOCK_SIZE - (buf_p - buf);
392 if(init_gap > 0) 392 if(init_gap > 0)
393 { 393 {
394 byte *data = xmalloc(init_gap); 394 uint8_t *data = xmalloc(init_gap);
395 generate_random_data(data, init_gap); 395 generate_random_data(data, init_gap);
396 sha_1_update(&file_sha1, data, init_gap); 396 sha_1_update(&file_sha1, data, init_gap);
397 write(data, init_gap); 397 write(data, init_gap);
@@ -407,13 +407,13 @@ enum sb_error_t sb_write_file(struct sb_file_t *sb, const char *filename, void *
407 produce_section_tag_cmd(&sb->sections[i], &tag_cmd, (i + 1) == sb_hdr.nr_sections); 407 produce_section_tag_cmd(&sb->sections[i], &tag_cmd, (i + 1) == sb_hdr.nr_sections);
408 if(g_nr_keys > 0) 408 if(g_nr_keys > 0)
409 { 409 {
410 check_crypto(crypto_apply((byte *)&tag_cmd, (byte *)&tag_cmd, 410 check_crypto(crypto_apply((uint8_t *)&tag_cmd, (uint8_t *)&tag_cmd,
411 sizeof(tag_cmd) / BLOCK_SIZE, crypto_iv, NULL, true)); 411 sizeof(tag_cmd) / BLOCK_SIZE, crypto_iv, NULL, true));
412 } 412 }
413 sha_1_update(&file_sha1, (byte *)&tag_cmd, sizeof(tag_cmd)); 413 sha_1_update(&file_sha1, (uint8_t *)&tag_cmd, sizeof(tag_cmd));
414 write(&tag_cmd, sizeof(tag_cmd)); 414 write(&tag_cmd, sizeof(tag_cmd));
415 /* produce other commands */ 415 /* produce other commands */
416 byte cur_cbc_mac[16]; 416 uint8_t cur_cbc_mac[16];
417 memcpy(cur_cbc_mac, crypto_iv, 16); 417 memcpy(cur_cbc_mac, crypto_iv, 16);
418 for(int j = 0; j < sb->sections[i].nr_insts; j++) 418 for(int j = 0; j < sb->sections[i].nr_insts; j++)
419 { 419 {
@@ -425,17 +425,17 @@ enum sb_error_t sb_write_file(struct sb_file_t *sb, const char *filename, void *
425 produce_sb_instruction(inst, &cmd, u, cprintf); 425 produce_sb_instruction(inst, &cmd, u, cprintf);
426 if(g_nr_keys > 0 && !sb->sections[i].is_cleartext) 426 if(g_nr_keys > 0 && !sb->sections[i].is_cleartext)
427 { 427 {
428 check_crypto(crypto_apply((byte *)&cmd, (byte *)&cmd, 428 check_crypto(crypto_apply((uint8_t *)&cmd, (uint8_t *)&cmd,
429 sizeof(cmd) / BLOCK_SIZE, cur_cbc_mac, &cur_cbc_mac, true)); 429 sizeof(cmd) / BLOCK_SIZE, cur_cbc_mac, &cur_cbc_mac, true));
430 } 430 }
431 sha_1_update(&file_sha1, (byte *)&cmd, sizeof(cmd)); 431 sha_1_update(&file_sha1, (uint8_t *)&cmd, sizeof(cmd));
432 write(&cmd, sizeof(cmd)); 432 write(&cmd, sizeof(cmd));
433 } 433 }
434 /* data */ 434 /* data */
435 if(inst->inst == SB_INST_LOAD || inst->inst == SB_INST_DATA) 435 if(inst->inst == SB_INST_LOAD || inst->inst == SB_INST_DATA)
436 { 436 {
437 uint32_t sz = inst->size + inst->padding_size; 437 uint32_t sz = inst->size + inst->padding_size;
438 byte *data = xmalloc(sz); 438 uint8_t *data = xmalloc(sz);
439 memcpy(data, inst->data, inst->size); 439 memcpy(data, inst->data, inst->size);
440 memcpy(data + inst->size, inst->padding, inst->padding_size); 440 memcpy(data + inst->size, inst->padding, inst->padding_size);
441 if(g_nr_keys > 0 && !sb->sections[i].is_cleartext) 441 if(g_nr_keys > 0 && !sb->sections[i].is_cleartext)
@@ -452,7 +452,7 @@ enum sb_error_t sb_write_file(struct sb_file_t *sb, const char *filename, void *
452 uint32_t pad_size = sb->sections[i].pad_size; 452 uint32_t pad_size = sb->sections[i].pad_size;
453 if(sb->sections[i].is_data) 453 if(sb->sections[i].is_data)
454 { 454 {
455 byte *data = xmalloc(pad_size * BLOCK_SIZE); 455 uint8_t *data = xmalloc(pad_size * BLOCK_SIZE);
456 generate_random_data(data, pad_size * BLOCK_SIZE); 456 generate_random_data(data, pad_size * BLOCK_SIZE);
457 sha_1_update(&file_sha1, data, pad_size * BLOCK_SIZE); 457 sha_1_update(&file_sha1, data, pad_size * BLOCK_SIZE);
458 write(data, pad_size * BLOCK_SIZE); 458 write(data, pad_size * BLOCK_SIZE);
@@ -468,16 +468,16 @@ enum sb_error_t sb_write_file(struct sb_file_t *sb, const char *filename, void *
468 cmd.hdr.checksum = instruction_checksum(&cmd.hdr); 468 cmd.hdr.checksum = instruction_checksum(&cmd.hdr);
469 if(g_nr_keys > 0 && !sb->sections[i].is_cleartext) 469 if(g_nr_keys > 0 && !sb->sections[i].is_cleartext)
470 { 470 {
471 check_crypto(crypto_apply((byte *)&cmd, (byte *)&cmd, 471 check_crypto(crypto_apply((uint8_t *)&cmd, (uint8_t *)&cmd,
472 sizeof(cmd) / BLOCK_SIZE, cur_cbc_mac, &cur_cbc_mac, true)); 472 sizeof(cmd) / BLOCK_SIZE, cur_cbc_mac, &cur_cbc_mac, true));
473 } 473 }
474 sha_1_update(&file_sha1, (byte *)&cmd, sizeof(cmd)); 474 sha_1_update(&file_sha1, (uint8_t *)&cmd, sizeof(cmd));
475 write(&cmd, sizeof(cmd)); 475 write(&cmd, sizeof(cmd));
476 } 476 }
477 } 477 }
478 } 478 }
479 /* write file SHA-1 */ 479 /* write file SHA-1 */
480 byte final_sig[32]; 480 uint8_t final_sig[32];
481 sha_1_finish(&file_sha1); 481 sha_1_finish(&file_sha1);
482 sha_1_output(&file_sha1, final_sig); 482 sha_1_output(&file_sha1, final_sig);
483 generate_random_data(final_sig + 20, 12); 483 generate_random_data(final_sig + 20, 12);
@@ -513,7 +513,7 @@ enum sb_error_t sb_write_file(struct sb_file_t *sb, const char *filename, void *
513 #undef printf 513 #undef printf
514} 514}
515 515
516static struct sb_section_t *read_section(bool data_sec, uint32_t id, byte *buf, 516static struct sb_section_t *read_section(bool data_sec, uint32_t id, uint8_t *buf,
517 int size, const char *indent, void *u, generic_printf_t cprintf, enum sb_error_t *err) 517 int size, const char *indent, void *u, generic_printf_t cprintf, enum sb_error_t *err)
518{ 518{
519 #define printf(c, ...) cprintf(u, false, c, __VA_ARGS__) 519 #define printf(c, ...) cprintf(u, false, c, __VA_ARGS__)
@@ -758,7 +758,7 @@ struct sb_file_t *sb_read_memory(void *_buf, size_t filesize, unsigned flags, vo
758 fatal(SB_CRYPTO_ERROR, "Crypto error: %d\n", err); } while(0) 758 fatal(SB_CRYPTO_ERROR, "Crypto error: %d\n", err); } while(0)
759 759
760 struct sha_1_params_t sha_1_params; 760 struct sha_1_params_t sha_1_params;
761 byte (*cbcmacs)[16] = xmalloc(16 * g_nr_keys); 761 uint8_t (*cbcmacs)[16] = xmalloc(16 * g_nr_keys);
762 sb_file = xmalloc(sizeof(struct sb_file_t)); 762 sb_file = xmalloc(sizeof(struct sb_file_t));
763 memset(sb_file, 0, sizeof(struct sb_file_t)); 763 memset(sb_file, 0, sizeof(struct sb_file_t));
764 struct sb_header_t *sb_header = (struct sb_header_t *)buf; 764 struct sb_header_t *sb_header = (struct sb_header_t *)buf;
@@ -790,10 +790,10 @@ struct sb_file_t *sb_read_memory(void *_buf, size_t filesize, unsigned flags, vo
790 printf(GREEN, " SB version: "); 790 printf(GREEN, " SB version: ");
791 printf(YELLOW, "%d.%d\n", sb_header->major_ver, sb_header->minor_ver); 791 printf(YELLOW, "%d.%d\n", sb_header->major_ver, sb_header->minor_ver);
792 printf(GREEN, " Header SHA-1: "); 792 printf(GREEN, " Header SHA-1: ");
793 byte *hdr_sha1 = sb_header->sha1_header; 793 uint8_t *hdr_sha1 = sb_header->sha1_header;
794 print_hex(YELLOW, hdr_sha1, 20, false); 794 print_hex(YELLOW, hdr_sha1, 20, false);
795 /* Check SHA1 sum */ 795 /* Check SHA1 sum */
796 byte computed_sha1[20]; 796 uint8_t computed_sha1[20];
797 sha_1_init(&sha_1_params); 797 sha_1_init(&sha_1_params);
798 sha_1_update(&sha_1_params, &sb_header->signature[0], 798 sha_1_update(&sha_1_params, &sb_header->signature[0],
799 sizeof(struct sb_header_t) - sizeof(sb_header->sha1_header)); 799 sizeof(struct sb_header_t) - sizeof(sb_header->sha1_header));
@@ -876,7 +876,7 @@ struct sb_file_t *sb_read_memory(void *_buf, size_t filesize, unsigned flags, vo
876 print_key(&printer, sb_printer, &g_key_array[i], true); 876 print_key(&printer, sb_printer, &g_key_array[i], true);
877 printf(GREEN, " CBC-MAC: "); 877 printf(GREEN, " CBC-MAC: ");
878 /* check it */ 878 /* check it */
879 byte zero[16]; 879 uint8_t zero[16];
880 memset(zero, 0, 16); 880 memset(zero, 0, 16);
881 check_crypto(crypto_setup(&g_key_array[i])); 881 check_crypto(crypto_setup(&g_key_array[i]));
882 check_crypto(crypto_apply(buf, NULL, sb_header->header_size + 882 check_crypto(crypto_apply(buf, NULL, sb_header->header_size +
@@ -906,8 +906,8 @@ struct sb_file_t *sb_read_memory(void *_buf, size_t filesize, unsigned flags, vo
906 { 906 {
907 printf(RED, " Match\n"); 907 printf(RED, " Match\n");
908 /* decrypt */ 908 /* decrypt */
909 byte decrypted_key[16]; 909 uint8_t decrypted_key[16];
910 byte iv[16]; 910 uint8_t iv[16];
911 memcpy(iv, buf, 16); /* uses the first 16-bytes of SHA-1 sig as IV */ 911 memcpy(iv, buf, 16); /* uses the first 16-bytes of SHA-1 sig as IV */
912 check_crypto(crypto_setup(&g_key_array[idx])); 912 check_crypto(crypto_setup(&g_key_array[idx]));
913 check_crypto(crypto_apply(dict_entry->key, decrypted_key, 1, iv, NULL, false)); 913 check_crypto(crypto_apply(dict_entry->key, decrypted_key, 1, iv, NULL, false));
@@ -1008,7 +1008,7 @@ struct sb_file_t *sb_read_memory(void *_buf, size_t filesize, unsigned flags, vo
1008 } 1008 }
1009 1009
1010 /* save it */ 1010 /* save it */
1011 byte *sec = xmalloc(size); 1011 uint8_t *sec = xmalloc(size);
1012 if(encrypted) 1012 if(encrypted)
1013 check_crypto(crypto_apply(buf + pos, sec, size / BLOCK_SIZE, buf, NULL, false)); 1013 check_crypto(crypto_apply(buf + pos, sec, size / BLOCK_SIZE, buf, NULL, false));
1014 else 1014 else
@@ -1034,13 +1034,13 @@ struct sb_file_t *sb_read_memory(void *_buf, size_t filesize, unsigned flags, vo
1034 /* advanced raw mode */ 1034 /* advanced raw mode */
1035 printf(BLUE, "Commands\n"); 1035 printf(BLUE, "Commands\n");
1036 uint32_t offset = sb_header->first_boot_tag_off * BLOCK_SIZE; 1036 uint32_t offset = sb_header->first_boot_tag_off * BLOCK_SIZE;
1037 byte iv[16]; 1037 uint8_t iv[16];
1038 const char *indent = " "; 1038 const char *indent = " ";
1039 while(true) 1039 while(true)
1040 { 1040 {
1041 /* restart with IV */ 1041 /* restart with IV */
1042 memcpy(iv, buf, 16); 1042 memcpy(iv, buf, 16);
1043 byte cmd[BLOCK_SIZE]; 1043 uint8_t cmd[BLOCK_SIZE];
1044 if(sb_header->nr_keys > 0) 1044 if(sb_header->nr_keys > 0)
1045 check_crypto(crypto_apply(buf + offset, cmd, 1, iv, &iv, false)); 1045 check_crypto(crypto_apply(buf + offset, cmd, 1, iv, &iv, false));
1046 else 1046 else
@@ -1106,7 +1106,7 @@ struct sb_file_t *sb_read_memory(void *_buf, size_t filesize, unsigned flags, vo
1106 } 1106 }
1107 1107
1108 /* save it */ 1108 /* save it */
1109 byte *sec = xmalloc(size); 1109 uint8_t *sec = xmalloc(size);
1110 if(encrypted) 1110 if(encrypted)
1111 check_crypto(crypto_apply(buf + pos, sec, size / BLOCK_SIZE, buf, NULL, false)); 1111 check_crypto(crypto_apply(buf + pos, sec, size / BLOCK_SIZE, buf, NULL, false));
1112 else 1112 else
@@ -1147,11 +1147,11 @@ struct sb_file_t *sb_read_memory(void *_buf, size_t filesize, unsigned flags, vo
1147 1147
1148 /* final signature */ 1148 /* final signature */
1149 printf(BLUE, "Final signature:\n"); 1149 printf(BLUE, "Final signature:\n");
1150 byte decrypted_block[32]; 1150 uint8_t decrypted_block[32];
1151 if(sb_header->nr_keys > 0) 1151 if(sb_header->nr_keys > 0)
1152 { 1152 {
1153 printf(GREEN, " Encrypted SHA-1:\n"); 1153 printf(GREEN, " Encrypted SHA-1:\n");
1154 byte *encrypted_block = &buf[filesize - 32]; 1154 uint8_t *encrypted_block = &buf[filesize - 32];
1155 printf(OFF, " "); 1155 printf(OFF, " ");
1156 print_hex(YELLOW, encrypted_block, 16, true); 1156 print_hex(YELLOW, encrypted_block, 16, true);
1157 printf(OFF, " "); 1157 printf(OFF, " ");