7 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
8 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
9 255,255,255,255,255,255,255,255,255,255,255, 62,255,255,255, 63,
10 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,255,255,255, 0,255,255,
11 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
12 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,255,255,255,255,255,
13 255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
14 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,255,255,255,255,255,
15 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
16 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
17 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
18 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
19 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
20 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
21 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
22 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
34 out[0]=(v[0]<<2)|(v[1]>>4);
35 out[1]=(v[1]<<4)|(v[2]>>2);
36 out[2]=(v[2]<<6)|(v[3]);
37 return (v[0]|v[1]|v[2]|v[3])!=255 ? in[3]==
'=' ? in[2]==
'=' ? 1 : 2 : 3 : 0;
47 for(io=0,ii=0,v=0,rem=0;ii<in_len;ii++) {
49 if(
isspace((
int)in[ii]))
continue;
50 if(in[ii]==
'=')
break;
57 if(io>=out_len)
return -1;
58 out[io++]=(v>>rem)&255;
63 if(io>=out_len)
return -1;
64 out[io++]=(v>>rem)&255;
72 static const uint8_t base64enc_tab[64]=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
74 void base64encode(
const unsigned char in[3],
unsigned char out[4],
int count) {
75 out[0]=base64enc_tab[(in[0]>>2)];
76 out[1]=base64enc_tab[((in[0]&3)<<4)|(in[1]>>4)];
77 out[2]=count<2 ? '=' : base64enc_tab[((in[1]&15)<<2)|(in[2]>>6)];
78 out[3]=count<3 ?
'=' : base64enc_tab[(in[2]&63)];
82 int base64_encode(
size_t in_len,
const unsigned char *in,
size_t out_len,
char *out) {
87 for(io=0,ii=0,v=0,rem=0;ii<in_len;ii++) {
94 if(io>=out_len)
return -1;
95 out[io++]=base64enc_tab[(v>>rem)&63];
100 if(io>=out_len)
return -1;
101 out[io++]=base64enc_tab[v&63];
104 if(io>=out_len)
return -1;
107 if(io>=out_len)
return -1;
static const uint8_t base64dec_tab[256]
#define ICACHE_FLASH_ATTR
int ICACHE_FLASH_ATTR base64_decode(size_t in_len, const char *in, size_t out_len, unsigned char *out)