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);