25 RCSID(
"$Id: 6ace506b70494c88573fd4ed7c67ce749b3939ea $")
27 #include <freeradius-devel/libradius.h>
28 #include <freeradius-devel/base64.h>
30 #define us(x) (uint8_t) x
46 static char const b64str[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
55 *p++ = b64str[(in[0] >> 2) & 0x3f];
56 *p++ = b64str[((in[0] << 4) + (--inlen ? in[1] >> 4 : 0)) & 0x3f];
57 *p++ = (inlen ? b64str[((in[1] << 2) + (--inlen ? in[2] >> 6 : 0)) & 0x3f] :
'=');
58 *p++ = inlen ? b64str[in[2] & 0x3f] :
'=';
147 static const signed char b64[0x100] = {
225 return b64[
us(c)] >= 0;
264 *p++ = ((b64[
us(in[0])] << 2) | (b64[
us(in[1])] >> 4));
266 if (inlen == 2)
break;
269 if ((inlen != 4) || (in[3] !=
'='))
break;
273 *p++ = ((b64[
us(in[1])] << 4) & 0xf0) | (b64[
us(in[2])] >> 2);
275 if (inlen == 3)
break;
278 if (inlen != 4)
break;
282 *p++ = ((b64[
us(in[2])] << 6) & 0xc0) | b64[
us(in[3])];
size_t fr_base64_encode(char *out, size_t outlen, uint8_t const *in, size_t inlen)
Base 64 encode binary data.
bool fr_is_base64(char c)
Check if char is in Base64 alphabet.
#define FR_BASE64_ENC_LENGTH(inlen)
ssize_t fr_base64_decode(uint8_t *out, size_t outlen, char const *in, size_t inlen)
#define FR_BASE64_DEC_LENGTH(inlen)
static const signed char b64[0x100]
#define us(x)
Encode/decode binary data using printable characters.