X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/a66fca86b9f81e07161e89c101338968eda9d6c5..4be9e7507b65e131a7c69a8cf67bda11978c47b3:/client/loclass/cipherutils.c?ds=inline diff --git a/client/loclass/cipherutils.c b/client/loclass/cipherutils.c index 685a3815..e11e8d22 100644 --- a/client/loclass/cipherutils.c +++ b/client/loclass/cipherutils.c @@ -21,12 +21,11 @@ * along with IClassCipher. If not, see . ****************************************************************************/ -#include "cipherutils.h" -#include "../util.h" #include #include #include - +#include "fileutils.h" +#include "cipherutils.h" /** * * @brief Return and remove the first bit (x0) in the stream : @@ -101,6 +100,24 @@ int numBits(BitstreamOut *stream) return stream->numbits; } +void x_num_to_bytes(uint64_t n, size_t len, uint8_t* dest) +{ + while (len--) { + dest[len] = (uint8_t) n; + n >>= 8; + } +} + +uint64_t x_bytes_to_num(uint8_t* src, size_t len) +{ + uint64_t num = 0; + while (len--) + { + num = (num << 8) | (*src); + src++; + } + return num; +} uint8_t reversebytes(uint8_t b) { b = (b & 0xF0) >> 4 | (b & 0x0F) << 4; b = (b & 0xCC) >> 2 | (b & 0x33) << 2; @@ -115,8 +132,69 @@ void reverse_arraybytes(uint8_t* arr, size_t len) arr[i] = reversebytes(arr[i]); } } +void reverse_arraycopy(uint8_t* arr, uint8_t* dest, size_t len) +{ + uint8_t i; + for( i =0; i< len ; i++) + { + dest[i] = reversebytes(arr[i]); + } +} + +void printarr(char * name, uint8_t* arr, int len) +{ + int cx; + size_t outsize = 40+strlen(name)+len*5; + char* output = malloc(outsize); + memset(output, 0,outsize); + + int i ; + cx = snprintf(output,outsize, "uint8_t %s[] = {", name); + for(i =0 ; i< len ; i++) + { + cx += snprintf(output+cx,outsize-cx,"0x%02x,",*(arr+i));//5 bytes per byte + } + cx += snprintf(output+cx,outsize-cx,"};"); + prnlog(output); +} + +void printvar(char * name, uint8_t* arr, int len) +{ + int cx; + size_t outsize = 40+strlen(name)+len*2; + char* output = malloc(outsize); + memset(output, 0,outsize); + + int i ; + cx = snprintf(output,outsize,"%s = ", name); + for(i =0 ; i< len ; i++) + { + cx += snprintf(output+cx,outsize-cx,"%02x",*(arr+i));//2 bytes per byte + } + + prnlog(output); +} + +void printarr_human_readable(char * title, uint8_t* arr, int len) +{ + int cx; + size_t outsize = 100+strlen(title)+len*4; + char* output = malloc(outsize); + memset(output, 0,outsize); + int i; + cx = snprintf(output,outsize, "\n\t%s\n", title); + for(i =0 ; i< len ; i++) + { + if(i % 16 == 0) + cx += snprintf(output+cx,outsize-cx,"\n%02x| ", i ); + cx += snprintf(output+cx,outsize-cx, "%02x ",*(arr+i)); + } + prnlog(output); + free(output); +} + //----------------------------- // Code for testing below //----------------------------- @@ -137,14 +215,14 @@ int testBitStream() } if(memcmp(input, output, sizeof(input)) == 0) { - printf("Bitstream test 1 ok\n"); + prnlog(" Bitstream test 1 ok"); }else { - printf("Bitstream test 1 failed\n"); + prnlog(" Bitstream test 1 failed"); uint8_t i; for(i = 0 ; i < sizeof(input) ; i++) { - printf("IN %02x, OUT %02x\n", input[i], output[i]); + prnlog(" IN %02x, OUT %02x", input[i], output[i]); } return 1; } @@ -171,14 +249,14 @@ int testReversedBitstream() } if(memcmp(input, output, sizeof(input)) == 0) { - printf("Bitstream test 2 ok\n"); + prnlog(" Bitstream test 2 ok"); }else { - printf("Bitstream test 2 failed\n"); + prnlog(" Bitstream test 2 failed"); uint8_t i; for(i = 0 ; i < sizeof(input) ; i++) { - printf("IN %02x, MIDDLE: %02x, OUT %02x\n", input[i],reverse[i], output[i]); + prnlog(" IN %02x, MIDDLE: %02x, OUT %02x", input[i],reverse[i], output[i]); } return 1; } @@ -188,6 +266,7 @@ int testReversedBitstream() int testCipherUtils(void) { + prnlog("[+] Testing some internals..."); int retval = 0; retval |= testBitStream(); retval |= testReversedBitstream();