util: Add hex_decode_talloc() to decode hex string into a binary blob
authorAmitay Isaacs <amitay@gmail.com>
Wed, 13 Mar 2013 11:57:44 +0000 (22:57 +1100)
committerAmitay Isaacs <amitay@gmail.com>
Mon, 25 Mar 2013 06:51:41 +0000 (17:51 +1100)
Signed-off-by: Amitay Isaacs <amitay@gmail.com>
(cherry picked from commit 307416afda707b687f5e89e8438e45c154a4c806)

include/includes.h
lib/util/util_file.c

index b3f8eb941b22ad6cce91a7180a3db6bf2f9e6677..d5e3095554e5c704369ac4ec25b657178d594aaa 100644 (file)
@@ -53,6 +53,7 @@ double timeval_elapsed(struct timeval *tv);
 double timeval_delta(struct timeval *tv2, struct timeval *tv);
 char **file_lines_load(const char *fname, int *numlines, TALLOC_CTX *mem_ctx);
 char *hex_encode_talloc(TALLOC_CTX *mem_ctx, const unsigned char *buff_in, size_t len);
+uint8_t *hex_decode_talloc(TALLOC_CTX *mem_ctx, const char *hex_in, size_t *len);
 _PUBLIC_ const char **str_list_add(const char **list, const char *s);
 _PUBLIC_ int set_blocking(int fd, BOOL set);
 
index 21d64b20e3dab574b9d872bce71cebbcbfc05bae..3a90201cce70c403111cd484fa3e2324a2e763b0 100644 (file)
@@ -114,3 +114,19 @@ char *hex_encode_talloc(TALLOC_CTX *mem_ctx, const unsigned char *buff_in, size_
 
        return hex_buffer;
 }
+
+uint8_t *hex_decode_talloc(TALLOC_CTX *mem_ctx, const char *hex_in, size_t *len)
+{
+       int i, num;
+       uint8_t *buffer;
+
+       *len = strlen(hex_in) / 2;
+       buffer = talloc_array(mem_ctx, unsigned char, *len);
+
+       for (i=0; i<*len; i++) {
+               sscanf(&hex_in[i*2], "%02X", &num);
+               buffer[i] = (uint8_t)num;
+       }
+
+       return buffer;
+}