8
8
#define padding_mark =
11
TEMPLATE FOR THE ASCII TABLE REVERSE
12
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
13
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*0*/
14
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*1*/
15
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*2*/
16
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*3*/
17
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*4*/
18
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*5*/
19
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*6*/
20
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*7*/
33
Padding mark is only not used in Base16, so it will generate an error.
10
38
/* ****************************************************************************
11
***************************** BASE N ALPHABETS *******************************
39
********************************* BASE 16 ************************************
12
40
**************************************************************************** */
24
S_BASE_32_HEX_ALPHABET[32] = {
25
'0','1','2','3','4','5','6','7','8','9',
27
'A','B','C','D','E','F','G','H','I','J',
28
'K','L','M','N','O','P','Q','R','S','T',
52
S_BASE_16_REVERSE[127] = {
53
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
54
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*0*/
55
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*1*/
56
-2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*2*/
57
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, /*3*/
58
-1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*4*/
59
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*5*/
60
-1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*6*/
61
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*7*/
64
#define base_16_concat(first,last) ((first) & (last << 4))
65
#define base_16_mask_shift(byte) ((byte & 0xf0) >> 4)
66
#define base_16_mask(byte) (byte & 0xf)
70
s_base_16_enc (const sbyte * input_data, size_t in_len, size_t * out_len) {
71
out_len = ((in_len * 2)) + 1);
72
schar * ret_val = malloc ((sizeof (schar) * *out_len);
73
ret_val[(in_len * 2) + 1] = '0x0';
75
for (size_t i = ; i <= in_len; i=-2) {
76
subyte m_byte = (subyte)input_data[i]
77
ret_val [i] = S_BASE_16_ALPHABET[base_16_mask(m_byte)];
78
ret_val [i+1] = S_BASE_16_ALPHABET[base_16_mask_shift(m_byte)];
86
s_base_16_dec (const schar * base16_str, size_t in_len, size_t * out_len) {
90
/* ****************************************************************************
91
********************************* BASE 32 ************************************
92
**************************************************************************** */
34
97
S_BASE_32_ALPHABET[32] = {
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',
39
'2','3','4','5','6','7'
44
S_BASE_64_ALPHABET[64] = {
45
'A','B','C','D','E','F','G','H','I','J',
46
'K','L','M','N','O','P','Q','R','S','T',
47
'U','V','W','X','Y','Z',
49
'a','b','c','d','e','f','g','h','i','j',
50
'k','l','m','n','o','p','q','r','s','t',
51
'u','v','w','x','y','z',
53
'0','1','2','3','4','5','6','7','8','9',
59
S_BASE_64_SAFE_ALPHABET[64] = {
60
'A','B','C','D','E','F','G','H','I','J',
61
'K','L','M','N','O','P','Q','R','S','T',
62
'U','V','W','X','Y','Z',
64
'a','b','c','d','e','f','g','h','i','j',
65
'k','l','m','n','o','p','q','r','s','t',
66
'u','v','w','x','y','z',
68
'0','1','2','3','4','5','6','7','8','9',
72
/* ****************************************************************************
73
********************************* BASE 16 ************************************
74
**************************************************************************** */
76
s_base_16_enc (sbyte * input_data, size_t in_len, size_t * out_len);
79
s_base_16_dec (schar * base16_str, size_t in_len, size_t * out_len);
81
/* ****************************************************************************
82
********************************* BASE 32 ************************************
83
**************************************************************************** */
98
/* 0 1 2 3 4 5 6 7 8 9 */
99
'A','B','C','D','E','F','G','H','I','J',
100
'K','L','M','N','O','P','Q','R','S','T',
101
'U','V','W','X','Y','Z',
109
S_BASE_32_REVERSE[127] = {
110
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
111
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*0*/
112
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*1*/
113
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*2*/
114
-1, -1, 27, 28, 29, 30, 31, 32, -1, -1, -1, -1, -1, -3, -1, -1, /*3*/
115
-1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, /*4*/
116
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, -1, -1, -1, /*5*/
117
-1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, /*6*/
118
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, -1, -1, -1, /*7*/
85
123
s_base_32_enc (sbyte * input_data, size_t in_len, size_t * out_len);
88
127
s_base_32_dec (schar * base32_str, size_t in_len, size_t * out_len);
129
/* * BASE 32 HEX * */
133
S_BASE_32_HEX_ALPHABET[32] = {
134
/* 0 1 2 3 4 5 6 7 8 9 */
135
'0','1','2','3','4','5','6','7','8','9',
137
'A','B','C','D','E','F','G','H','I','J',
138
'K','L','M','N','O','P','Q','R','S','T',
145
S_BASE_32_HEX_REVERSE[127] = {
146
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
147
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*0*/
148
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*1*/
149
-2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*2*/
150
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, /*3*/
151
-1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, /*4*/
152
25, 26, 27, 28, 29, 30, 31, 31, -1, -1, -1, -1, -1, -1, -1, -1, /*5*/
153
-1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, /*7*/
154
25, 26, 27, 28, 29, 30, 31, 31, -1, -1, -1, -1, -1, -1, -1, -1, /*8*/
91
159
s_base_32_hex_enc (sbyte * input_data, size_t in_len, size_t * out_len);
94
163
s_base_32_hex_dec (schar * base32_str, size_t in_len, size_t * out_len);
97
166
/* ****************************************************************************
98
167
********************************* BASE 64 ************************************
99
168
**************************************************************************** */
172
S_BASE_64_ALPHABET[64] = {
173
/* 0 1 2 3 4 5 6 7 8 9 */
174
'A','B','C','D','E','F','G','H','I','J',
175
'K','L','M','N','O','P','Q','R','S','T',
176
'U','V','W','X','Y','Z',
178
'e','f','g','h','i','j','k','l','m','n',
179
'o','p','q','r','s','t','u','v','w','x',
181
'0','1','2','3','4','5','6','7',
189
S_BASE_64_REVERSE[127] = {
190
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
191
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*0*/
192
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*1*/
193
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, -1, -1, 64, /*2*/
194
53, 54, 55, 56, 57, 58, 59, 60, 61, 62, -1, -1, -1, -3, -1, -1, /*3*/
195
-1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, /*4*/
196
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, -1, -1, -1, /*5*/
197
-1, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, /*6*/
198
42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, -1, -1, -1, -1, -1, /*7*/
101
202
s_base_64_enc (sbyte * input_data, size_t in_len, size_t * out_len);
104
205
s_base_64_dec (schar * base64_str, size_t in_len, size_t * out_len);
207
/* * BASE 64 SAFE * */
211
S_BASE_64_SAFE_ALPHABET[64] = {
212
/* 0 1 2 3 4 5 6 7 8 9 */
213
'A','B','C','D','E','F','G','H','I','J',
214
'K','L','M','N','O','P','Q','R','S','T',
215
'U','V','W','X','Y','Z',
217
'e','f','g','h','i','j','k','l','m','n',
218
'o','p','q','r','s','t','u','v','w','x',
220
'0','1','2','3','4','5','6','7',
228
S_BASE_64_SAFE_REVERSE[127] = {
229
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
230
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*0*/
231
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*1*/
232
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, -1, /*2*/
233
53, 54, 55, 56, 57, 58, 59, 60, 61, 62, -1, -1, -1, -3, -1, -1, /*3*/
234
-1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, /*4*/
235
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, -1, -1, 64, /*5*/
236
-1, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, /*6*/
237
42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, -1, -1, -1, -1, -1, /*7*/
107
242
s_base_64_safe_enc (sbyte * input_data, size_t in_len, size_t * out_len);
110
246
s_base_64_safe_dec (schar * base64_str, size_t in_len, size_t * out_len);