From 77ea27f25165302491a693051bea05c67e6dfbed Mon Sep 17 00:00:00 2001 From: Szczepan Zalega Date: Fri, 9 Sep 2016 10:18:46 +0200 Subject: Add hex to binary converting function Signed-off-by: Szczepan Zalega --- misc.cc | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'misc.cc') diff --git a/misc.cc b/misc.cc index d004d0f..5d7c387 100644 --- a/misc.cc +++ b/misc.cc @@ -2,10 +2,36 @@ #include #include "misc.h" #include "inttypes.h" +#include +#include +#include namespace nitrokey { namespace misc { +std::vector hex_string_to_byte(const char* hexString){ + const size_t s_size = strlen(hexString); + const size_t d_size = (s_size+1)/2; // add 1 for odd, ignore for even + assert(s_size%2==0); + assert(s_size<256); //arbitrary 'big' number + auto data = std::vector(d_size, 0); + + char buf[2]; + for(int i=0; i Date: Fri, 9 Sep 2016 16:42:31 +0200 Subject: Remove asserts in favor of exceptions or warnings. Test changes in Python. On possible data truncation return LibraryError(exception) instead of silently truncating and logging warning Signed-off-by: Szczepan Zalega --- misc.cc | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'misc.cc') diff --git a/misc.cc b/misc.cc index 5d7c387..9b339cd 100644 --- a/misc.cc +++ b/misc.cc @@ -4,25 +4,27 @@ #include "inttypes.h" #include #include -#include +#include "LibraryException.h" namespace nitrokey { namespace misc { std::vector 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+1)/2; // add 1 for odd, ignore for even - assert(s_size%2==0); - assert(s_size<256); //arbitrary 'big' number + 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(d_size, 0); char buf[2]; for(int i=0; i