cleaned all trailing white space from source files.
[sdk] / extras / base64.ec
1 static char base64digits[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
2 static char base64inv[128] =
3 {
4     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
6     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,0, 0, 0,63,
7    52,53,54,55,56,57,58,59,60,61, 0, 0, 0, 0, 0, 0,
8     0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,
9    15,16,17,18,19,20,21,22,23,24,25, 0, 0, 0, 0, 0,
10     0,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,
11    41,42,43,44,45,46,47,48,49,50,51, 0, 0, 0, 0, 0
12 };
13
14 int Base64Encode(byte * input, int len, byte * encoded)
15 {
16    uint buffer;
17    int c = 0;
18    int remaining = 3;
19    int encLen = 0;
20    while(c < len)
21    {
22       int b;
23       if(len - c < 3)
24       {
25          remaining = len - c;
26          buffer = 0;
27          buffer |= (int)input[c] << 16;
28          if(len - c > 1)
29             buffer |= (int)input[c+1] << 8;
30       }
31       else
32          buffer = ((int)input[c] << 16) | ((int)input[c+1] << 8) | input[c+2];
33       encoded[encLen++] = base64digits[(buffer & 0xFC0000) >> 18];
34       encoded[encLen++] = base64digits[(buffer & 0x03F000) >> 12];
35       encoded[encLen++] = (remaining >= 2) ? base64digits[(buffer & 0x000FC0) >> 6] : '=';
36       encoded[encLen++] = (remaining >= 3) ? base64digits[(buffer & 0x00003F)]      : '=';
37       c += 3;
38    }
39    encoded[encLen] = 0;
40    return encLen;
41 }
42
43 int Base64Decode(byte * input, int len, byte * decoded)
44 {
45    uint buffer;
46    int c = 0;
47    int decLen = 0;
48    while(c < len)
49    {
50       buffer = ((int)base64inv[input[c]] << 18) | ((int)base64inv[input[c+1]] << 12) | ((int)base64inv[input[c+2]] << 6) | ((int)base64inv[input[c+3]]);
51
52       decoded[decLen++] = (byte)((buffer & 0xFF0000) >> 16);
53       if(len - c < 4)
54       {
55          if(input[c+2] != '=')
56          {
57             decoded[decLen++] = (byte)((buffer & 0x00FF00) >> 8);
58             if(input[c+3] != '=')
59                decoded[decLen++] = (byte)(buffer & 0x0000FF);
60          }
61       }
62       else
63       {
64          decoded[decLen++] = (byte)((buffer & 0x00FF00) >> 8);
65          decoded[decLen++] = (byte)(buffer & 0x0000FF);
66       }
67       c += 4;
68    }
69    decoded[decLen] = 0;
70    return decLen;
71 }