diff --git a/crypto/dap_enc_base58.c b/crypto/dap_enc_base58.c
index b23b3ed6afb6320fef9d4c0153300fb15c5c9cfc..e04da0203e86ab31fa5bc6dfb8124853b52fed0d 100755
--- a/crypto/dap_enc_base58.c
+++ b/crypto/dap_enc_base58.c
@@ -59,7 +59,7 @@ size_t dap_enc_base58_decode(const char * a_in, void * a_out)
     size_t l_outi_size = (l_out_size_max + 3) / 4;
 
     uint32_t l_outi[l_outi_size];
-    memzero(l_outi,l_outi_size);
+    memzero(l_outi,l_outi_size*sizeof(uint32_t));
     uint64_t t;
     uint32_t c;
     size_t i, j;
@@ -77,10 +77,10 @@ size_t dap_enc_base58_decode(const char * a_in, void * a_out)
     {
         if (l_in_u8[i] & 0x80)
             // High-bit set on invalid digit
-            return false;
+            return 0;
         if (c_b58digits_map[l_in_u8[i]] == -1)
             // Invalid base58 digit
-            return false;
+            return 0;
         c = (unsigned)c_b58digits_map[l_in_u8[i]];
         for (j = l_outi_size; j--; )
         {
@@ -133,6 +133,13 @@ size_t dap_enc_base58_decode(const char * a_in, void * a_out)
         }
         --l_out_size;
     }
+
+
+    // shift result to beginning of the string
+    for (j = 0; j < l_out_size; j++){
+        l_out_u8[j+zerocount] = l_out_u8[j+i];
+    }
+    l_out_u8[j+zerocount] = 0;
     l_out_size += zerocount;
 
     return l_out_size;
diff --git a/crypto/dap_enc_base58.h b/crypto/dap_enc_base58.h
index 0ca469cd23121f3f28c9c4ceca63cb302ddea6bd..abc90fabd3c0d31b261ef7d0fa3dd70c92eaabbf 100755
--- a/crypto/dap_enc_base58.h
+++ b/crypto/dap_enc_base58.h
@@ -34,7 +34,7 @@ extern "C" {
 /*
  * Calculates encode size from input size
  */
-#define DAP_ENC_BASE58_ENCODE_SIZE(a_in_size) ( (size_t) ((137 * a_in_size / 100)+1))
+#define DAP_ENC_BASE58_ENCODE_SIZE(a_in_size) ( (size_t) ((137 * a_in_size / 100)+2))
 #define DAP_ENC_BASE58_DECODE_SIZE(a_in_size) ( (size_t) ( 2 * a_in_size   +1) )
 
 size_t dap_enc_base58_encode(const void * a_in, size_t a_in_size, char * a_out);