diff options
Diffstat (limited to 'utils/imxtools')
-rw-r--r-- | utils/imxtools/sbtools/misc.c | 46 | ||||
-rw-r--r-- | utils/imxtools/sbtools/misc.h | 10 | ||||
-rw-r--r-- | utils/imxtools/sbtools/sb.c | 29 |
3 files changed, 60 insertions, 25 deletions
diff --git a/utils/imxtools/sbtools/misc.c b/utils/imxtools/sbtools/misc.c index 71b3cb600b..58e9609909 100644 --- a/utils/imxtools/sbtools/misc.c +++ b/utils/imxtools/sbtools/misc.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <stdio.h> | 22 | #include <stdio.h> |
23 | #include <time.h> | 23 | #include <time.h> |
24 | #include <ctype.h> | 24 | #include <ctype.h> |
25 | #include <stdarg.h> | ||
25 | #include "misc.h" | 26 | #include "misc.h" |
26 | 27 | ||
27 | bool g_debug = false; | 28 | bool g_debug = false; |
@@ -193,6 +194,15 @@ void clear_keys() | |||
193 | g_key_array = NULL; | 194 | g_key_array = NULL; |
194 | } | 195 | } |
195 | 196 | ||
197 | void misc_std_printf(void *user, const char *fmt, ...) | ||
198 | { | ||
199 | (void) user; | ||
200 | va_list args; | ||
201 | va_start(args, fmt); | ||
202 | vprintf(fmt, args); | ||
203 | va_end(args); | ||
204 | } | ||
205 | |||
196 | bool add_keys_from_file(const char *key_file) | 206 | bool add_keys_from_file(const char *key_file) |
197 | { | 207 | { |
198 | int size; | 208 | int size; |
@@ -233,7 +243,7 @@ bool add_keys_from_file(const char *key_file) | |||
233 | if(g_debug) | 243 | if(g_debug) |
234 | { | 244 | { |
235 | printf("Add key: "); | 245 | printf("Add key: "); |
236 | print_key(&k, true); | 246 | print_key(NULL, misc_std_printf, &k, true); |
237 | } | 247 | } |
238 | add_keys(&k, 1); | 248 | add_keys(&k, 1); |
239 | /* request at least one space character before next key, or end of file */ | 249 | /* request at least one space character before next key, or end of file */ |
@@ -253,45 +263,45 @@ bool add_keys_from_file(const char *key_file) | |||
253 | return true; | 263 | return true; |
254 | } | 264 | } |
255 | 265 | ||
256 | void print_hex(byte *data, int len, bool newline) | 266 | void print_hex(void *user, misc_printf_t printf, byte *data, int len, bool newline) |
257 | { | 267 | { |
258 | for(int i = 0; i < len; i++) | 268 | for(int i = 0; i < len; i++) |
259 | printf("%02X ", data[i]); | 269 | printf(user, "%02X ", data[i]); |
260 | if(newline) | 270 | if(newline) |
261 | printf("\n"); | 271 | printf(user, "\n"); |
262 | } | 272 | } |
263 | 273 | ||
264 | void print_key(struct crypto_key_t *key, bool newline) | 274 | void print_key(void *user, misc_printf_t printf, struct crypto_key_t *key, bool newline) |
265 | { | 275 | { |
266 | switch(key->method) | 276 | switch(key->method) |
267 | { | 277 | { |
268 | case CRYPTO_KEY: | 278 | case CRYPTO_KEY: |
269 | print_hex(key->u.key, 16, false); | 279 | print_hex(user, printf, key->u.key, 16, false); |
270 | break; | 280 | break; |
271 | case CRYPTO_USBOTP: | 281 | case CRYPTO_USBOTP: |
272 | printf("USB-OTP(%04x:%04x)", key->u.vid_pid >> 16, key->u.vid_pid & 0xffff); | 282 | printf(user, "USB-OTP(%04x:%04x)", key->u.vid_pid >> 16, key->u.vid_pid & 0xffff); |
273 | break; | 283 | break; |
274 | case CRYPTO_NONE: | 284 | case CRYPTO_NONE: |
275 | printf("none"); | 285 | printf(user, "none"); |
276 | break; | 286 | break; |
277 | case CRYPTO_XOR_KEY: | 287 | case CRYPTO_XOR_KEY: |
278 | print_hex(&key->u.xor_key[0].key[0], 64, false); | 288 | print_hex(user, printf, &key->u.xor_key[0].key[0], 64, false); |
279 | print_hex(&key->u.xor_key[1].key[0], 64, false); | 289 | print_hex(user, printf, &key->u.xor_key[1].key[0], 64, false); |
280 | break; | 290 | break; |
281 | default: | 291 | default: |
282 | printf("unknown"); | 292 | printf(user, "unknown"); |
283 | } | 293 | } |
284 | if(newline) | 294 | if(newline) |
285 | printf("\n"); | 295 | printf(user, "\n"); |
286 | } | 296 | } |
287 | 297 | ||
288 | char OFF[] = { 0x1b, 0x5b, 0x31, 0x3b, '0', '0', 0x6d, '\0' }; | 298 | const char OFF[] = { 0x1b, 0x5b, 0x31, 0x3b, '0', '0', 0x6d, '\0' }; |
289 | 299 | ||
290 | char GREY[] = { 0x1b, 0x5b, 0x31, 0x3b, '3', '0', 0x6d, '\0' }; | 300 | const char GREY[] = { 0x1b, 0x5b, 0x31, 0x3b, '3', '0', 0x6d, '\0' }; |
291 | char RED[] = { 0x1b, 0x5b, 0x31, 0x3b, '3', '1', 0x6d, '\0' }; | 301 | const char RED[] = { 0x1b, 0x5b, 0x31, 0x3b, '3', '1', 0x6d, '\0' }; |
292 | char GREEN[] = { 0x1b, 0x5b, 0x31, 0x3b, '3', '2', 0x6d, '\0' }; | 302 | const char GREEN[] = { 0x1b, 0x5b, 0x31, 0x3b, '3', '2', 0x6d, '\0' }; |
293 | char YELLOW[] = { 0x1b, 0x5b, 0x31, 0x3b, '3', '3', 0x6d, '\0' }; | 303 | const char YELLOW[] = { 0x1b, 0x5b, 0x31, 0x3b, '3', '3', 0x6d, '\0' }; |
294 | char BLUE[] = { 0x1b, 0x5b, 0x31, 0x3b, '3', '4', 0x6d, '\0' }; | 304 | const char BLUE[] = { 0x1b, 0x5b, 0x31, 0x3b, '3', '4', 0x6d, '\0' }; |
295 | 305 | ||
296 | static bool g_color_enable = true; | 306 | static bool g_color_enable = true; |
297 | 307 | ||
diff --git a/utils/imxtools/sbtools/misc.h b/utils/imxtools/sbtools/misc.h index 8429e84faf..624cd5a9c0 100644 --- a/utils/imxtools/sbtools/misc.h +++ b/utils/imxtools/sbtools/misc.h | |||
@@ -43,6 +43,10 @@ typedef struct crypto_key_t *key_array_t; | |||
43 | int g_nr_keys; | 43 | int g_nr_keys; |
44 | key_array_t g_key_array; | 44 | key_array_t g_key_array; |
45 | 45 | ||
46 | typedef void (*misc_printf_t)(void *user, const char *fmt, ...); | ||
47 | |||
48 | void misc_std_printf(void *user, const char *fmt, ...); | ||
49 | |||
46 | void *memdup(const void *p, size_t len); | 50 | void *memdup(const void *p, size_t len); |
47 | void *augment_array(void *arr, size_t elem_sz, size_t cnt, void *aug, size_t aug_cnt); | 51 | void *augment_array(void *arr, size_t elem_sz, size_t cnt, void *aug, size_t aug_cnt); |
48 | void augment_array_ex(void **arr, size_t elem_sz, int *cnt, int *capacity, | 52 | void augment_array_ex(void **arr, size_t elem_sz, int *cnt, int *capacity, |
@@ -50,14 +54,14 @@ void augment_array_ex(void **arr, size_t elem_sz, int *cnt, int *capacity, | |||
50 | void generate_random_data(void *buf, size_t sz); | 54 | void generate_random_data(void *buf, size_t sz); |
51 | void *xmalloc(size_t s); | 55 | void *xmalloc(size_t s); |
52 | int convxdigit(char digit, byte *val); | 56 | int convxdigit(char digit, byte *val); |
53 | void print_hex(byte *data, int len, bool newline); | 57 | void print_hex(void *user, misc_printf_t printf, byte *data, int len, bool newline); |
54 | void add_keys(key_array_t ka, int kac); | 58 | void add_keys(key_array_t ka, int kac); |
55 | bool parse_key(char **str, struct crypto_key_t *key); | 59 | bool parse_key(char **str, struct crypto_key_t *key); |
56 | bool add_keys_from_file(const char *key_file); | 60 | bool add_keys_from_file(const char *key_file); |
57 | void print_key(struct crypto_key_t *key, bool newline); | 61 | void print_key(void *user, misc_printf_t printf, struct crypto_key_t *key, bool newline); |
58 | void clear_keys(); | 62 | void clear_keys(); |
59 | 63 | ||
60 | typedef char color_t[]; | 64 | typedef const char color_t[]; |
61 | 65 | ||
62 | extern color_t OFF, GREY, RED, GREEN, YELLOW, BLUE; | 66 | extern color_t OFF, GREY, RED, GREEN, YELLOW, BLUE; |
63 | void color(color_t c); | 67 | void color(color_t c); |
diff --git a/utils/imxtools/sbtools/sb.c b/utils/imxtools/sbtools/sb.c index df3622940f..218ea5a6f7 100644 --- a/utils/imxtools/sbtools/sb.c +++ b/utils/imxtools/sbtools/sb.c | |||
@@ -674,6 +674,25 @@ struct sb_file_t *sb_read_file_ex(const char *filename, size_t offset, size_t si | |||
674 | #undef fatal | 674 | #undef fatal |
675 | } | 675 | } |
676 | 676 | ||
677 | struct printer_t | ||
678 | { | ||
679 | void *user; | ||
680 | sb_color_printf cprintf; | ||
681 | const char *color; | ||
682 | bool error; | ||
683 | }; | ||
684 | |||
685 | static void sb_printer(void *user, const char *fmt, ...) | ||
686 | { | ||
687 | struct printer_t *p = user; | ||
688 | va_list args; | ||
689 | va_start(args, fmt); | ||
690 | char buffer[1024]; | ||
691 | vsnprintf(buffer, sizeof(buffer), fmt, args); | ||
692 | p->cprintf(p->user, p->error, p->color, "%s", buffer); | ||
693 | va_end(args); | ||
694 | } | ||
695 | |||
677 | struct sb_file_t *sb_read_memory(void *_buf, size_t filesize, bool raw_mode, void *u, | 696 | struct sb_file_t *sb_read_memory(void *_buf, size_t filesize, bool raw_mode, void *u, |
678 | sb_color_printf cprintf, enum sb_error_t *err) | 697 | sb_color_printf cprintf, enum sb_error_t *err) |
679 | { | 698 | { |
@@ -686,8 +705,9 @@ struct sb_file_t *sb_read_memory(void *_buf, size_t filesize, bool raw_mode, voi | |||
686 | cprintf(u, true, GREY, __VA_ARGS__); \ | 705 | cprintf(u, true, GREY, __VA_ARGS__); \ |
687 | sb_free(sb_file); \ | 706 | sb_free(sb_file); \ |
688 | return NULL; } while(0) | 707 | return NULL; } while(0) |
708 | struct printer_t printer = {.user = u, .cprintf = cprintf, .color = OFF, .error = false }; | ||
689 | #define print_hex(c, p, len, nl) \ | 709 | #define print_hex(c, p, len, nl) \ |
690 | do { printf(c, ""); print_hex(p, len, nl); } while(0) | 710 | do { printer.color = c; print_hex(&printer, sb_printer, p, len, nl); } while(0) |
691 | 711 | ||
692 | struct sha_1_params_t sha_1_params; | 712 | struct sha_1_params_t sha_1_params; |
693 | sb_file = xmalloc(sizeof(struct sb_file_t)); | 713 | sb_file = xmalloc(sizeof(struct sb_file_t)); |
@@ -798,8 +818,8 @@ struct sb_file_t *sb_read_memory(void *_buf, size_t filesize, bool raw_mode, voi | |||
798 | { | 818 | { |
799 | printf(RED, " Key %d\n", i), | 819 | printf(RED, " Key %d\n", i), |
800 | printf(GREEN, " Key: "); | 820 | printf(GREEN, " Key: "); |
801 | printf(YELLOW, ""); | 821 | printer.color = YELLOW; |
802 | print_key(&g_key_array[i], true); | 822 | print_key(&printer, sb_printer, &g_key_array[i], true); |
803 | printf(GREEN, " CBC-MAC: "); | 823 | printf(GREEN, " CBC-MAC: "); |
804 | /* check it */ | 824 | /* check it */ |
805 | byte zero[16]; | 825 | byte zero[16]; |
@@ -1137,8 +1157,9 @@ void sb_free(struct sb_file_t *file) | |||
1137 | void sb_dump(struct sb_file_t *file, void *u, sb_color_printf cprintf) | 1157 | void sb_dump(struct sb_file_t *file, void *u, sb_color_printf cprintf) |
1138 | { | 1158 | { |
1139 | #define printf(c, ...) cprintf(u, false, c, __VA_ARGS__) | 1159 | #define printf(c, ...) cprintf(u, false, c, __VA_ARGS__) |
1160 | struct printer_t printer = {.user = u, .cprintf = cprintf, .color = OFF, .error = false }; | ||
1140 | #define print_hex(c, p, len, nl) \ | 1161 | #define print_hex(c, p, len, nl) \ |
1141 | do { printf(c, ""); print_hex(p, len, nl); } while(0) | 1162 | do { printer.color = c; print_hex(&printer, sb_printer, p, len, nl); } while(0) |
1142 | 1163 | ||
1143 | #define TREE RED | 1164 | #define TREE RED |
1144 | #define HEADER GREEN | 1165 | #define HEADER GREEN |