44static char base64_chars[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
56 const unsigned char *q;
62 p = s = (
char *)malloc(size * 4 / 3 + 4);
67 q = (
const unsigned char *)data;
69 for (
i = 0;
i < size;)
117#define DECODE_ERROR 0xffffffff
123 unsigned int val = 0;
125 if (!token[0] || !token[1] || !token[2] || !token[3])
129 for (
i = 0;
i < 4;
i++)
142 val +=
pos(token[
i]);
149 return (marker << 24) | val;
161 unsigned char *e = NULL;
168 for (p = str; *p && (*p ==
'=' || strchr(
base64_chars, *p)); p += 4)
171 unsigned int marker = (val >> 24) & 0xff;
180 *q++ = (val >> 16) & 0xff;
187 *q++ = (val >> 8) & 0xff;
198 return q - (
unsigned char *)data;
int openvpn_base64_decode(const char *str, void *data, int size)
static char base64_chars[]
int openvpn_base64_encode(const void *data, int size, char **str)
static unsigned int token_decode(const char *token)