summaryrefslogtreecommitdiff
path: root/utils/imxtools/misc.c
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2012-05-23 11:03:35 +0200
committerAmaury Pouly <amaury.pouly@gmail.com>2012-05-31 13:57:25 +0200
commita87a9ef37372b4380808ec2efa7c762e137668f1 (patch)
tree9c759088f0f9cf6717d96789b6805812f6b187ea /utils/imxtools/misc.c
parentba8e4367fb4d116ffc01c12cc619bfc714e582c9 (diff)
downloadrockbox-a87a9ef37372b4380808ec2efa7c762e137668f1.zip
rockbox-a87a9ef37372b4380808ec2efa7c762e137668f1.tar.gz
rockbox-a87a9ef37372b4380808ec2efa7c762e137668f1.tar.bz2
rockbox-a87a9ef37372b4380808ec2efa7c762e137668f1.tar.xz
imxtools: move tools to a new sbtools/ subdirectory
Change-Id: I0d8d6831b35037725486f61fc363de87bc8ba92e
Diffstat (limited to 'utils/imxtools/misc.c')
-rw-r--r--utils/imxtools/misc.c265
1 files changed, 0 insertions, 265 deletions
diff --git a/utils/imxtools/misc.c b/utils/imxtools/misc.c
deleted file mode 100644
index fce71ae..0000000
--- a/utils/imxtools/misc.c
+++ /dev/null
@@ -1,265 +0,0 @@
-/***************************************************************************
- * __________ __ ___.
- * Open \______ \ ____ ____ | | _\_ |__ _______ ___
- * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
- * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
- * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
- * \/ \/ \/ \/ \/
- * $Id$
- *
- * Copyright (C) 2010 Amaury Pouly
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ****************************************************************************/
-#include <stdlib.h>
-#include <stdio.h>
-#include <time.h>
-#include <ctype.h>
-#include "misc.h"
-
-bool g_debug = false;
-
-/**
- * Misc
- */
-
-void *memdup(const void *p, size_t len)
-{
- void *cpy = xmalloc(len);
- memcpy(cpy, p, len);
- return cpy;
-}
-
-void generate_random_data(void *buf, size_t sz)
-{
- size_t i = 0;
- unsigned char* p = (unsigned char*)buf;
- while(i++ < sz)
- *p++ = rand();
-}
-
-void *xmalloc(size_t s)
-{
- void * r = malloc(s);
- if(!r) bugp("malloc");
- return r;
-}
-
-int convxdigit(char digit, byte *val)
-{
- if(digit >= '0' && digit <= '9')
- {
- *val = digit - '0';
- return 0;
- }
- else if(digit >= 'A' && digit <= 'F')
- {
- *val = digit - 'A' + 10;
- return 0;
- }
- else if(digit >= 'a' && digit <= 'f')
- {
- *val = digit - 'a' + 10;
- return 0;
- }
- else
- return 1;
-}
-
-/* helper function to augment an array, free old array */
-void *augment_array(void *arr, size_t elem_sz, size_t cnt, void *aug, size_t aug_cnt)
-{
- void *p = xmalloc(elem_sz * (cnt + aug_cnt));
- memcpy(p, arr, elem_sz * cnt);
- memcpy(p + elem_sz * cnt, aug, elem_sz * aug_cnt);
- free(arr);
- return p;
-}
-
-/**
- * Key file parsing
- */
-int g_nr_keys;
-key_array_t g_key_array;
-
-bool parse_key(char **pstr, struct crypto_key_t *key)
-{
- char *str = *pstr;
- /* ignore spaces */
- while(isspace(*str))
- str++;
- /* CRYPTO_KEY: 32 hex characters
- * CRYPTO_USBOTP: usbotp(vid:pid) where vid and pid are hex numbers */
- if(isxdigit(str[0]))
- {
- if(strlen(str) < 32)
- return false;
- for(int j = 0; j < 16; j++)
- {
- byte a, b;
- if(convxdigit(str[2 * j], &a) || convxdigit(str[2 * j + 1], &b))
- return false;
- key->u.key[j] = (a << 4) | b;
- }
- /* skip key */
- *pstr = str + 32;
- key->method = CRYPTO_KEY;
- return true;
- }
- else
- {
- const char *prefix = "usbotp(";
- if(strlen(str) < strlen(prefix))
- return false;
- if(strncmp(str, prefix, strlen(prefix)) != 0)
- return false;
- str += strlen(prefix);
- /* vid */
- long vid = strtol(str, &str, 16);
- if(vid < 0 || vid > 0xffff)
- return false;
- if(*str++ != ':')
- return false;
- /* pid */
- long pid = strtol(str, &str, 16);
- if(pid < 0 || pid > 0xffff)
- return false;
- if(*str++ != ')')
- return false;
- *pstr = str;
- key->method = CRYPTO_USBOTP;
- key->u.vid_pid = vid << 16 | pid;
- return true;
- }
-}
-
-void add_keys(key_array_t ka, int kac)
-{
- key_array_t new_ka = xmalloc((g_nr_keys + kac) * sizeof(struct crypto_key_t));
- memcpy(new_ka, g_key_array, g_nr_keys * sizeof(struct crypto_key_t));
- memcpy(new_ka + g_nr_keys, ka, kac * sizeof(struct crypto_key_t));
- free(g_key_array);
- g_key_array = new_ka;
- g_nr_keys += kac;
-}
-
-void clear_keys()
-{
- free(g_key_array);
- g_nr_keys = 0;
- g_key_array = NULL;
-}
-
-bool add_keys_from_file(const char *key_file)
-{
- int size;
- FILE *fd = fopen(key_file, "r");
- if(fd == NULL)
- {
- if(g_debug)
- perror("cannot open key file");
- return false;
- }
- fseek(fd, 0, SEEK_END);
- size = ftell(fd);
- fseek(fd, 0, SEEK_SET);
- char *buf = xmalloc(size + 1);
- if(fread(buf, 1, size, fd) != (size_t)size)
- {
- if(g_debug)
- perror("Cannot read key file");
- fclose(fd);
- return false;
- }
- buf[size] = 0;
- fclose(fd);
-
- if(g_debug)
- printf("Parsing key file '%s'...\n", key_file);
- char *p = buf;
- while(1)
- {
- struct crypto_key_t k;
- /* parse key */
- if(!parse_key(&p, &k))
- {
- if(g_debug)
- printf("invalid key file\n");
- return false;
- }
- if(g_debug)
- {
- printf("Add key: ");
- print_key(&k, true);
- }
- add_keys(&k, 1);
- /* request at least one space character before next key, or end of file */
- if(*p != 0 && !isspace(*p))
- {
- if(g_debug)
- printf("invalid key file\n");
- return false;
- }
- /* skip whitespace */
- while(isspace(*p))
- p++;
- if(*p == 0)
- break;
- }
- free(buf);
- return true;
-}
-
-void print_hex(byte *data, int len, bool newline)
-{
- for(int i = 0; i < len; i++)
- printf("%02X ", data[i]);
- if(newline)
- printf("\n");
-}
-
-void print_key(struct crypto_key_t *key, bool newline)
-{
- switch(key->method)
- {
- case CRYPTO_KEY:
- print_hex(key->u.key, 16, false);
- break;
- case CRYPTO_USBOTP:
- printf("USB-OTP(%04x:%04x)", key->u.vid_pid >> 16, key->u.vid_pid & 0xffff);
- break;
- case CRYPTO_NONE:
- printf("none");
- break;
- }
- if(newline)
- printf("\n");
-}
-
-char OFF[] = { 0x1b, 0x5b, 0x31, 0x3b, '0', '0', 0x6d, '\0' };
-
-char GREY[] = { 0x1b, 0x5b, 0x31, 0x3b, '3', '0', 0x6d, '\0' };
-char RED[] = { 0x1b, 0x5b, 0x31, 0x3b, '3', '1', 0x6d, '\0' };
-char GREEN[] = { 0x1b, 0x5b, 0x31, 0x3b, '3', '2', 0x6d, '\0' };
-char YELLOW[] = { 0x1b, 0x5b, 0x31, 0x3b, '3', '3', 0x6d, '\0' };
-char BLUE[] = { 0x1b, 0x5b, 0x31, 0x3b, '3', '4', 0x6d, '\0' };
-
-static bool g_color_enable = true;
-
-void enable_color(bool enable)
-{
- g_color_enable = enable;
-}
-
-void color(color_t c)
-{
- if(g_color_enable)
- printf("%s", (char *)c);
-}