]> cvs.zerfleddert.de Git - proxmark3-svn/blobdiff - client/util.c
ADD: @pwpiwi 's latest code from his 'hardnested' branch.
[proxmark3-svn] / client / util.c
index 057be9ed6bab09664b349be0371d1ef40f18413d..de1cbe94571a18cc0cbe0d8e534f083a76d6f54e 100644 (file)
@@ -124,7 +124,12 @@ char *sprint_hex(const uint8_t *data, const size_t len) {
 
 char *sprint_bin_break(const uint8_t *data, const size_t len, const uint8_t breaks) {
        // make sure we don't go beyond our char array memory
-       int max_len = ( len+(len/breaks) > MAX_BIN_BREAK_LENGTH ) ? MAX_BIN_BREAK_LENGTH : len+(len/breaks);
+       int max_len;
+       if (breaks==0)
+               max_len = ( len > MAX_BIN_BREAK_LENGTH ) ? MAX_BIN_BREAK_LENGTH : len;
+       else
+               max_len = ( len+(len/breaks) > MAX_BIN_BREAK_LENGTH ) ? MAX_BIN_BREAK_LENGTH : len+(len/breaks);
+
        static char buf[MAX_BIN_BREAK_LENGTH]; // 3072 + end of line characters if broken at 8 bits
        //clear memory
        memset(buf, 0x00, sizeof(buf));
@@ -150,6 +155,14 @@ char *sprint_bin_break(const uint8_t *data, const size_t len, const uint8_t brea
 char *sprint_bin(const uint8_t *data, const size_t len) {
        return sprint_bin_break(data, len, 0);
 }
+
+char *sprint_hex_ascii(const uint8_t *data, const size_t len) {
+       static char buf[1024];
+       memset(buf, 0x00, 1024);
+       char *tmp = buf;
+       sprintf(tmp, "%s| %s", sprint_hex(data, len) , data);   
+       return buf;
+}
 void num_to_bytes(uint64_t n, size_t len, uint8_t* dest)
 {
        while (len--) {
@@ -181,8 +194,8 @@ void num_to_bytebits(uint64_t       n, size_t len, uint8_t *dest) {
 // hh,gg,ff,ee,dd,cc,bb,aa, pp,oo,nn,mm,ll,kk,jj,ii
 // up to 64 bytes or 512 bits
 uint8_t *SwapEndian64(const uint8_t *src, const size_t len, const uint8_t blockSize){
-       //static uint8_t buf[64];
-       uint8_t buf[64];
+       static uint8_t buf[64];
+       //uint8_t buf[64];
        memset(buf, 0x00, 64);
        uint8_t *tmp = buf;
        for (uint8_t block=0; block < (uint8_t)(len/blockSize); block++){
@@ -193,28 +206,6 @@ uint8_t *SwapEndian64(const uint8_t *src, const size_t len, const uint8_t blockS
        return tmp;
 }
 
-//assumes little endian
-char * printBits(size_t const size, void const * const ptr)
-{
-    unsigned char *b = (unsigned char*) ptr;   
-    unsigned char byte;
-       static char buf[1024];
-       char * tmp = buf;
-    int i, j;
-
-    for (i=size-1;i>=0;i--)
-    {
-        for (j=7;j>=0;j--)
-        {
-            byte = b[i] & (1<<j);
-            byte >>= j;
-            sprintf(tmp, "%u", byte);
-                       tmp++;
-        }
-    }
-       return buf;
-}
-
 //  -------------------------------------------------------------------------
 //  string parameters lib
 //  -------------------------------------------------------------------------
@@ -333,13 +324,11 @@ int param_gethex(const char *line, int paramnum, uint8_t * data, int hexcnt)
 {
        int bg, en, temp, i;
 
-       if (hexcnt % 2)
-               return 1;
+       if (hexcnt & 1) return 1;
        
        if (param_getptr(line, &bg, &en, paramnum)) return 1;
 
-       if (en - bg + 1 != hexcnt) 
-               return 1;
+       if (en - bg + 1 != hexcnt) return 1;
 
        for(i = 0; i < hexcnt; i += 2) {
                if (!(isxdigit(line[bg + i]) && isxdigit(line[bg + i + 1])) )   return 1;
Impressum, Datenschutz