10static const char *b64alpha =
11 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
30 while (in[l-1] ==
B64PAD) {
41 for (i = 0; i < n - 1 ; i++) {
43 for (j = 0; j < 4; j++) {
44 if(in[j] >=
'A' && in[j] <=
'Z')
45 x = (x << 6) + (
unsigned int)(in[j] -
'A' + 0);
46 else if(in[j] >=
'a' && in[j] <=
'z')
47 x = (x << 6) + (
unsigned int)(in[j] -
'a' + 26);
48 else if(in[j] >=
'0' && in[j] <=
'9')
49 x = (x << 6) + (
unsigned int)(in[j] -
'0' + 52);
58 s[2] = (
unsigned char)(x & 255); x >>= 8;
59 s[1] = (
unsigned char)(x & 255); x >>= 8;
60 s[0] = (
unsigned char)(x & 255); x >>= 8;
65 for (j = 0; j < 4; j++) {
66 if(in[j] >=
'A' && in[j] <=
'Z')
67 x = (x << 6) + (
unsigned int)(in[j] -
'A' + 0);
68 else if(in[j] >=
'a' && in[j] <=
'z')
69 x = (x << 6) + (
unsigned int)(in[j] -
'a' + 26);
70 else if(in[j] >=
'0' && in[j] <=
'9')
71 x = (x << 6) + (
unsigned int)(in[j] -
'0' + 52);
80 b[2] = (
unsigned char)(x & 255); x >>= 8;
81 b[1] = (
unsigned char)(x & 255); x >>= 8;
82 b[0] = (
unsigned char)(x & 255); x >>= 8;
84 for (i = 0; i < 3 - p; i++)
92 unsigned char a, b, c;
101 i = in->
len / 3 * 4 + 4;
105 for (i = 0; i < in->
len; i += 3) {
107 b = i + 1 < in->
len ? in->
s[i + 1] : 0;
108 c = i + 2 < in->
len ? in->
s[i + 2] : 0;
110 *s++ = b64alpha[a >> 2];
111 *s++ = b64alpha[((a & 3 ) << 4) | (b >> 4)];
114 else *s++ = b64alpha[((b & 15) << 2) | (c >> 6)];
117 else *s++ = b64alpha[c & 63];
119 out->
len = s - out->
s;
int stralloc_ready(stralloc *sa, size_t len)
int stralloc_copys(stralloc *, const char *)
int b64encode(stralloc *in, stralloc *out)
int b64decode(const unsigned char *in, int l, stralloc *out)