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
39 '1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'A',
'B',
'C',
'D',
'E',
'F',
40 'G',
'H',
'J',
'K',
'L',
'M',
'N',
'P',
'Q',
'R',
'S',
'T',
'U',
'V',
'W',
41 'X',
'Y',
'Z',
'a',
'b',
'c',
'd',
'e',
'f',
'g',
'h',
'i',
'j',
'k',
'm',
42 'n',
'o',
'p',
'q',
'r',
's',
't',
'u',
'v',
'w',
'x',
'y',
'z'
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) {
79 for (
uint8_t div_loop = start_at; div_loop < in_len; div_loop++) {
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);
113 size_t zero_count = 0;
120 while ((zero_count < in_len) && (in[zero_count] == 0)) {
124 output_size = (in_len - zero_count) * 138 / 100 + 1;
125 stop_at = output_size - 1;
126 for (
size_t start_at = zero_count; start_at < in_len; start_at++) {
127 int carry = in[start_at];
128 for (j = output_size - 1; (int) j >= 0; j--) {
129 carry += 256 * buffer[j];
130 buffer[j] = carry % 58;
133 if (j <= stop_at - 1 && carry == 0) {
141 while (j < output_size && buffer[j] == 0) {
145 if (out_len < zero_count + output_size - j) {
152 while (j < output_size) {
char const BASE58_ALPHABET[]
uint8_t const BASE58_TABLE[]
int base58_encode(const uint8_t *in, size_t in_len, char *out, size_t out_len)
int base58_decode(const char *in, size_t in_len, uint8_t *out, size_t out_len)
#define MAX_DEC_INPUT_SIZE
#define MAX_ENC_INPUT_SIZE