summaryrefslogtreecommitdiff
path: root/misc.cc
diff options
context:
space:
mode:
Diffstat (limited to 'misc.cc')
-rw-r--r--misc.cc28
1 files changed, 28 insertions, 0 deletions
diff --git a/misc.cc b/misc.cc
index d004d0f..9b339cd 100644
--- a/misc.cc
+++ b/misc.cc
@@ -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];