diff options
Diffstat (limited to 'misc.cc')
-rw-r--r-- | misc.cc | 28 |
1 files changed, 28 insertions, 0 deletions
@@ -2,10 +2,38 @@ #include <string> #include "misc.h" #include "inttypes.h" +#include <cstdlib> +#include <cstring> +#include "LibraryException.h" namespace nitrokey { namespace misc { +std::vector<uint8_t> hex_string_to_byte(const char* hexString){ + const size_t big_string_size = 256; //arbitrary 'big' number + const size_t s_size = strlen(hexString); + const size_t d_size = s_size/2; + if (s_size%2!=0 || s_size==0 || s_size>big_string_size){ + throw InvalidHexString(0); + } + auto data = std::vector<uint8_t>(d_size, 0); + + char buf[2]; + for(int i=0; i<s_size; i++){ + + char c = hexString[i]; + bool char_from_range = (('0' <= c && c <='9') || ('A' <= c && c <= 'F') || ('a' <= c && c<= 'f')); + if (!char_from_range){ + throw InvalidHexString(c); + } + buf[i%2] = c; + if (i%2==1){ + data[i/2] = strtoul(buf, NULL, 16) & 0xFF; + } + } + return data; +}; + std::string hexdump(const char *p, size_t size, bool print_header) { std::stringstream out; char formatbuf[128]; |