Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
7944 pavelyakov 1
/* Author: PaulCodeman
2
	Example:
3
	char bufferb64[0x1000] = {0};
4
	base64_encode("Kevin van Zonneveld",#bufferb64, 19);
5
	#bufferb64 == "S2V2aW4gdmFuIFpvbm5ldmVsZA=="
6
*/
7
 
8
:dword b64_symbols = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
9
inline void base64_encode(dword data, buffer, length)
10
{
11
	byte o1 = 0;
12
	byte o2 = 0;
13
	byte o3 = 0;
14
	dword bits = 0;
15
	dword h1 = 0;
16
	dword h2 = 0;
17
	dword h3 = 0;
18
	dword h4 = 0;
19
 
20
	dword end = 0;
21
	end = data+length;
22
 
23
	do
24
	{
25
		o1 = DSBYTE[data];data++;
26
		if (data < end) {o2 = DSBYTE[data];data++;} else o2 = 0;
27
		if (data < end) {o3 = DSBYTE[data];data++;} else o3 = 0;
28
 
29
		bits = o1<<16;
30
		bits |= o2<<8;
31
		bits |= o3;
32
 
33
		h1 = bits>>18 & 0x3f;
34
		h2 = bits>>12 & 0x3f;
35
		h3 = bits>>6 & 0x3f;
36
		h4 = bits & 0x3f;
37
 
38
		DSBYTE[buffer] = DSBYTE[#b64_symbols+h1];buffer++;
39
		DSBYTE[buffer] = DSBYTE[#b64_symbols+h2];buffer++;
40
		DSBYTE[buffer] = DSBYTE[#b64_symbols+h3];buffer++;
41
		DSBYTE[buffer] = DSBYTE[#b64_symbols+h4];buffer++;
42
	} while(end > data);
43
	switch(length % 3)
44
	{
45
		case 1:
46
			buffer--;
47
			DSBYTE[buffer] = '=';
48
			buffer--;
49
			DSBYTE[buffer] = '=';
50
			buffer+=2;
51
		break;
52
		case 2:
53
			buffer--;
54
			DSBYTE[buffer] = '=';
55
			buffer++;
56
		break;
57
	}
58
	DSBYTE[buffer] = 0;
59
}