25 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
26 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
27 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
28 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
29 0xFF, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0xFF, 0xFF,
30 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
31 0x10, 0xFF, 0x11, 0x12, 0x13, 0x14, 0x15, 0xFF, 0x16, 0x17, 0x18, 0x19,
32 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
33 0xFF, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B,
34 0xFF, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36,
35 0x37, 0x38, 0x39, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
45int base58_decode(
const char *in,
size_t in_len, uint8_t *out,
size_t out_len)
51 uint8_t zero_count = 0;
57 memmove(tmp, in, in_len);
59 for (uint8_t i = 0; i < in_len; i++) {
71 while ((zero_count < in_len) && (tmp[zero_count] == 0)) {
76 start_at = zero_count;
77 while (start_at < in_len) {
78 uint16_t remainder = 0;
79 for (uint8_t div_loop = start_at; div_loop < in_len; div_loop++) {
80 uint16_t digit256 = (uint16_t) (tmp[div_loop] & 0xFF);
81 uint16_t tmp_div = remainder * 58 + digit256;
82 tmp[div_loop] = (uint8_t) (tmp_div / 256);
83 remainder = tmp_div % 256;
86 if (tmp[start_at] == 0) {
90 buffer[--j] = (uint8_t) remainder;
93 while ((j < in_len) && (buffer[j] == 0)) {
97 int length = in_len - (j - zero_count);
99 if ((
int) out_len < length) {
103 memmove(out, buffer + j - zero_count, length);