1
#include "xmpp/base64/base64.h"
5
QString Base64::encode(const QByteArray &s)
9
char tbl[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
13
p.resize((len+2)/3*4);
15
for( i = 0; i < len; i += 3 ) {
16
a = ((unsigned char)s[i] & 3) << 4;
18
a += (unsigned char)s[i + 1] >> 4;
19
b = ((unsigned char)s[i + 1] & 0xF) << 2;
21
b += (unsigned char)s[i + 2] >> 6;
22
c = (unsigned char)s[i + 2] & 0x3F;
31
p[at++] = tbl[(unsigned char)s[i] >> 2];
36
return QString::fromAscii(p);
39
QByteArray Base64::decode(const QString& input)
41
QByteArray s(QString(input).remove('\n').toUtf8());
44
// -1 specifies invalid
46
// everything else specifies data
49
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
50
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
51
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,
52
52,53,54,55,56,57,58,59,60,61,-1,-1,-1,64,-1,-1,
53
-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,
54
15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,
55
-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,
56
41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1,
57
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
58
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
59
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
60
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
61
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
62
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
63
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
64
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
67
// this should be a multiple of 4
74
p.resize(len / 4 * 3);
82
for( i = 0; i < len; i += 4 ) {
84
b = tbl[(int)s[i + 1]];
85
c = tbl[(int)s[i + 2]];
86
d = tbl[(int)s[i + 3]];
87
if((a == 64 || b == 64) || (a < 0 || b < 0 || c < 0 || d < 0)) {
91
p[at++] = ((a & 0x3F) << 2) | ((b >> 4) & 0x03);
92
p[at++] = ((b & 0x0F) << 4) | ((c >> 2) & 0x0F);
93
p[at++] = ((c & 0x03) << 6) | ((d >> 0) & 0x3F);