diff --git a/library/x509_create.c b/library/x509_create.c
index de3d33f..b2b6bcd 100644
--- a/library/x509_create.c
+++ b/library/x509_create.c
@@ -30,6 +30,10 @@
 
 #include "mbedtls/platform.h"
 
+#if defined(MBEDTLS_ASN1_PARSE_C)
+#include "mbedtls/asn1.h"
+#endif
+
 /* Structure linking OIDs for X.509 DN AttributeTypes to their
  * string representations and default string encodings used by Mbed TLS. */
 typedef struct {
@@ -171,12 +175,12 @@
     }
 }
 
-static int parse_attribute_value_string(const char *s, int len, char *data, int *data_len)
+static int parse_attribute_value_string(const char *s, int len, unsigned char *data, size_t *data_len)
 {
     const char *c = s;
     const char *end = c + len;
     int hexpair = 0;
-    char *d = data;
+    unsigned char *d = data;
     int n;
     while (c < end) {
         if (*c == '\\') {
@@ -205,26 +209,42 @@
     return 0;
 }
 
-static int parse_attribute_value_ber_encoded(const char *s, int len, char *data, int *data_len)
+static int parse_attribute_value_ber_encoded(const char *s, int len, unsigned char *data, size_t *data_len, int *tag)
 {
     const char *c = s;
     const char *end = c + len;
-    char *d = data;
-    int tag, n;
-    if ((len < 5) || (*c != '#') ||
-        ((tag =
-             hexpair_to_int(*(c+1), *(c+2))) == -1) || ((*data_len = hexpair_to_int(*(c+3), *(c+4))) == -1)) {
-        return MBEDTLS_ERR_X509_INVALID_NAME;
-    }
-    c += 5;
-
-    while (c < end) {
+    unsigned char asn1_der_buf[256];
+	unsigned char *asn1_der_end;
+	unsigned char *p;
+    unsigned char *d;
+    int n;
+	/* Converting from hexstring to raw binary so we can use asn1parse.c*/
+	if ((len < 5) || (*c != '#')) {
+		return MBEDTLS_ERR_X509_INVALID_NAME;
+	}
+	c++;
+	if((*tag = hexpair_to_int(*c, *(c+1))) == -1) {
+		return MBEDTLS_ERR_X509_INVALID_NAME;
+	}
+	c += 2;
+	p = asn1_der_buf;
+    for (p = asn1_der_buf; c < end; c += 2) {
         if ((c + 1 >= end) || (n = hexpair_to_int(*c, *(c+1))) == -1) {
             return MBEDTLS_ERR_X509_INVALID_NAME;
         }
-        *(d++) = n;
-        c += 2;
+        *(p++) = n;
     }
+	asn1_der_end = p;
+
+	p = asn1_der_buf;
+	if(mbedtls_asn1_get_len(&p, asn1_der_end, data_len) != 0) {
+		return MBEDTLS_ERR_X509_INVALID_NAME;
+	}
+
+	for (d = data; p < asn1_der_end; p++) {
+		*(d++) = *p; 
+	}
+
     return 0;
 }
 
@@ -237,9 +257,10 @@
     const char *oid = NULL;
     const x509_attr_descriptor_t *attr_descr = NULL;
     int in_tag = 1;
+    int tag;
     int numericoid = 0;
-    char data[MBEDTLS_X509_MAX_DN_NAME_SIZE];
-    int data_len = 0;
+    unsigned char data[MBEDTLS_X509_MAX_DN_NAME_SIZE];
+    size_t data_len = 0;
 
     /* Clear existing chain if present */
     mbedtls_asn1_free_named_data_list(head);
@@ -264,13 +285,14 @@
         if (!in_tag && ((*c == ',' && *(c-1) != '\\') || c == end)) {
             if (!numericoid) {
                 if ((parse_ret = parse_attribute_value_string(s, c - s, data, &data_len)) != 0) {
-                    return MBEDTLS_ERR_X509_INVALID_NAME;
+                    return parse_ret;
                 }
+                tag = attr_descr->default_tag;
             }
             if (numericoid) {
                 if ((parse_ret =
-                         parse_attribute_value_ber_encoded(s, c - s, data, &data_len)) != 0) {
-                    return MBEDTLS_ERR_X509_INVALID_NAME;
+                         parse_attribute_value_ber_encoded(s, c - s, data, &data_len, &tag)) != 0) {
+                    return parse_ret;
                 }
             }
             mbedtls_asn1_named_data *cur =
@@ -282,7 +304,7 @@
             }
 
             // set tagType
-            cur->val.tag = attr_descr->default_tag;
+            cur->val.tag = tag;
 
             while (c < end && *(c + 1) == ' ') {
                 c++;
