7static const char *b64alpha =
8 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
34 if (!stralloc_ready(
out,i))
return -1;
38 for (i = 0; i < n - 1; i++) {
40 for (
j = 0;
j < 4;
j++) {
41 if (
in[
j] >=
'A' &&
in[
j] <=
'Z')
42 x = (x << 6) + (
unsigned int) (
in[
j] -
'A' + 0);
43 else if (
in[
j] >=
'a' &&
in[
j] <=
'z')
44 x = (x << 6) + (
unsigned int) (
in[
j] -
'a' + 26);
45 else if (
in[
j] >=
'0' &&
in[
j] <=
'9')
46 x = (x << 6) + (
unsigned int) (
in[
j] -
'0' + 52);
47 else if (
in[
j] ==
'+')
49 else if (
in[
j] ==
'/')
51 else if (
in[
j] ==
'-')
53 else if (
in[
j] ==
'_')
55 else if (
in[
j] ==
'=')
60 s[2] = (
unsigned char) (x & 255); x >>= 8;
61 s[1] = (
unsigned char) (x & 255); x >>= 8;
62 s[0] = (
unsigned char) (x & 255); x >>= 8;
67 for (
j = 0;
j < 4;
j++) {
68 if (
in[
j] >=
'A' &&
in[
j] <=
'Z')
69 x = (x << 6) + (
unsigned int) (
in[
j] -
'A' + 0);
70 else if (
in[
j] >=
'a' &&
in[
j] <=
'z')
71 x = (x << 6) + (
unsigned int) (
in[
j] -
'a' + 26);
72 else if (
in[
j] >=
'0' &&
in[
j] <=
'9')
73 x = (x << 6) + (
unsigned int) (
in[
j] -
'0' + 52);
74 else if (
in[
j] ==
'+')
76 else if (
in[
j] ==
'/')
78 else if (
in[
j] ==
'-')
80 else if (
in[
j] ==
'_')
82 else if (
in[
j] ==
'=')
87 b[2] = (
unsigned char) (x & 255); x >>= 8;
88 b[1] = (
unsigned char) (x & 255); x >>= 8;
89 b[0] = (
unsigned char) (x & 255); x >>= 8;
91 for (i = 0; i < 3 -
p; i++)
99 unsigned char a,
b, c;
109 i =
in->len / 3 * 4 + 4;
110 if (!stralloc_ready(
out,i))
return -1;
113 for (i = 0; i <
in->len; i += 3) {
115 b = i + 1 <
in->len ?
in->s[i + 1] : 0;
116 c = i + 2 <
in->len ?
in->s[i + 2] : 0;
118 *s++ = b64alpha[a >> 2];
119 *s++ = b64alpha[((a & 3 ) << 4) | (
b >> 4)];
121 if (i + 1 >=
in->len) *s++ =
B64PAD;
122 else *s++ = b64alpha[((
b & 0x0f) << 2) | (c >> 6)];
124 if (i + 2 >=
in->len) *s++ =
B64PAD;
125 else *s++ = b64alpha[c & 0x3f];
int b64encode(stralloc *in, stralloc *out)
int b64decode(const unsigned char *in, int len, stralloc *out)
int stralloc_copys(stralloc *, char const *)
void p(char *, char *, int, int, int)