29 static
int ToB64low(const
char *in,
char *out,
int mod)
31 static char b64ref[64] = {
32 'A',
'B',
'C',
'D',
'E',
'F',
'G',
'H',
'I',
'J',
33 'K',
'L',
'M',
'N',
'O',
'P',
'Q',
'R',
'S',
'T',
34 'U',
'V',
'W',
'X',
'Y',
'Z',
35 'a',
'b',
'c',
'd',
'e',
'f',
'g',
'h',
'i',
'j',
36 'k',
'l',
'm',
'n',
'o',
'p',
'q',
'r',
's',
't',
37 'u',
'v',
'w',
'x',
'y',
'z',
38 '0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
46 *out++ = b64ref[ 0x3F & (in[0] >> 2) ];
47 *out++ = b64ref[ 0x3F & (0x30 & (in[0] << 4)) ];
50 }
else if (mod == 2) {
51 *out++ = b64ref[ 0x3F & (in[0] >> 2) ];
52 *out++ = b64ref[ 0x3F & ((0x30 & (in[0] << 4)) | (0x0F & (in[1] >> 4))) ];
53 *out++ = b64ref[ 0x3F & (0x3C & (in[1] << 2)) ];
56 *out++ = b64ref[ (int)(0x3F & (in[0] >> 2)) ];
57 *out++ = b64ref[ 0x3F & ((0x30 & (in[0] << 4)) | (0x0F & (in[1] >> 4))) ];
58 *out++ = b64ref[ 0x3F & ((0x3C & (in[1] << 2)) | (0x03 & (in[2] >> 6))) ];
59 *out++ = b64ref[ 0x3F & in[2] ];
72 static int b64inv[256] = {
73 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
74 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
75 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,
76 52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-2,-1,-1,
77 -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,
78 15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,
79 -1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,
80 41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1,
81 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
82 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
83 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
84 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
85 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
86 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
87 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
88 -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
96 out.
Append((
char)(0xFC & (b64inv[i0] << 2)) | (0x03 & (b64inv[i1] >> 4)));
97 out.
Append((
char)(0xF0 & (b64inv[i1] << 4)) | (0x0F & (b64inv[i2] >> 2)));
98 out.
Append((
char)(0xC0 & (b64inv[i2] << 6)) | (0x3F & b64inv[i3]));
100 }
else if (in[2] ==
'=') {
101 out.
Append((
char)(0xFC & (b64inv[i0] << 2)) | (0x03 & (b64inv[i1] >> 4)));
104 out.
Append((
char)(0xFC & (b64inv[i0] << 2)) | (0x03 & (b64inv[i1] >> 4)));
105 out.
Append((
char)(0xF0 & (b64inv[i1] << 4)) | (0x0F & (b64inv[i2] >> 2)));
115 return Encode(data, strlen(data));
127 for (
int i = 0; i < len; i += 3) {
129 ToB64low(data+i, oo, mod);
142 int len = strlen(data);
145 for (
int i = 0; i < len; i += 4)
This code implements the Base64 encoding and decoding.
static TString Decode(const char *data)
Decode a base64 string date into a generic TString.
static TString Encode(const char *data)
Transform data into a null terminated base64 string.
TString & Append(const char *cs)
static int FromB64low(const char *in, TString &out)
Base64 decoding of 4 bytes from in.
ClassImp(TBase64) static int ToB64low(const char *in
Base64 encoding of 3 bytes from in.