36 #elif defined(_MSC_VER) 47 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
59 const unsigned char *q;
65 p = s = (
char *)
malloc(size * 4 / 3 + 4);
70 q = (
const unsigned char *) data;
72 for (i = 0; i < size; )
120 #define DECODE_ERROR 0xffffffff 126 unsigned int val = 0;
128 if (!token[0] || !token[1] || !token[2] || !token[3])
132 for (i = 0; i < 4; i++)
145 val +=
pos(token[i]);
152 return (marker << 24) | val;
164 unsigned char *e = NULL;
171 for (p = str; *p && (*p ==
'=' || strchr(
base64_chars, *p)); p += 4)
174 unsigned int marker = (val >> 24) & 0xff;
183 *q++ = (val >> 16) & 0xff;
190 *q++ = (val >> 8) & 0xff;
201 return q - (
unsigned char *) data;
static char base64_chars[]
int openvpn_base64_decode(const char *str, void *data, int size)
int openvpn_base64_encode(const void *data, int size, char **str)
static unsigned int token_decode(const char *token)