summaryrefslogtreecommitdiff
path: root/misc.cc
diff options
context:
space:
mode:
authorszszszsz <szszszsz@users.noreply.github.com>2016-09-10 11:02:38 +0200
committerGitHub <noreply@github.com>2016-09-10 11:02:38 +0200
commitb16e89ad4445fe9bbb66e8e7f8771a6ca6b333cf (patch)
treed332db36123c80ac84474c75b9be4acdff81bf54 /misc.cc
parente164c5f3dc74fb2335b1fc573ce446cdd76a07dc (diff)
parenta46491a97da08e495c92bba8046426678b5564f7 (diff)
downloadlibnitrokey-b16e89ad4445fe9bbb66e8e7f8771a6ca6b333cf.tar.gz
libnitrokey-b16e89ad4445fe9bbb66e8e7f8771a6ca6b333cf.tar.bz2
Merge pull request #36 from Nitrokey/issue_31-secret_as_hex
#31 pass secret to OTP as hex (breaking change - previously any string was accepted)
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];