From 92d2951def6c7f86b34701ad0e80ad883629325f Mon Sep 17 00:00:00 2001 From: Aleksandr Lysikov <lysikov@inbox.ru> Date: Sun, 24 Feb 2019 08:44:18 +0500 Subject: [PATCH] fix decode_base58 --- crypto/dap_enc_base58.c | 13 ++++++++++--- crypto/dap_enc_base58.h | 2 +- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/crypto/dap_enc_base58.c b/crypto/dap_enc_base58.c index b23b3ed..e04da02 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 0ca469c..abc90fa 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); -- GitLab