bzr branch
http://gegoxaren.bato24.eu/bzr/simpletypesystem/trunk
162
by Gustav Hartvigsson
* stuff to do with the unfinished base32 implementation. |
1 |
/* Copyright 2021 Gustav Hatvigsson
|
2 |
*
|
|
3 |
* Based in part on work by Adrien Kunysz (Copyright 2010):
|
|
4 |
* https://github.com/mjg59/tpmtotp/blob/master/base32.c
|
|
5 |
*
|
|
6 |
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7 |
* of this software and associated documentation files (the "Software"), to deal
|
|
8 |
* in the Software without restriction, including without limitation the rights
|
|
9 |
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10 |
* copies of the Software, and to permit persons to whom the Software is
|
|
11 |
* furnished to do so, subject to the following conditions:
|
|
12 |
*
|
|
13 |
* The above copyright notice and this permission notice shall be included in
|
|
14 |
* all copies or substantial portions of the Software.
|
|
15 |
*
|
|
16 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17 |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18 |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19 |
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20 |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21 |
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
22 |
* THE SOFTWARE.
|
|
23 |
**/
|
|
24 |
||
89
by Gustav Hartvigsson
* Started working on Threads |
25 |
|
26 |
#include "BaseN.h" |
|
27 |
||
90
by Gustav Hartvigsson
* Macros were wrong. |
28 |
#define S_BASE_16_LAST 15
|
29 |
#define S_BASE_32_LAST 31
|
|
30 |
#define S_BASE_64_LAST 63
|
|
31 |
||
32 |
#define padding_mark =
|
|
33 |
||
162
by Gustav Hartvigsson
* stuff to do with the unfinished base32 implementation. |
34 |
|
35 |
#define EARLY_EXIT_ON_LEN_ZERO(inlen, outlen) { \
|
|
36 |
if (inlen == 0) { \
|
|
37 |
outlen = sizeof (""); \
|
|
38 |
sbyte * ret = s_malloc (outlen); \
|
|
39 |
ret[0] = '\0'; \
|
|
40 |
return ret; \
|
|
41 |
} \
|
|
42 |
}
|
|
43 |
||
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
44 |
#if 0
|
45 |
TEMPLATE FOR THE ASCII TABLE REVERSE
|
|
46 |
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
|
|
47 |
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*0*/
|
|
48 |
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*1*/
|
|
49 |
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*2*/
|
|
50 |
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*3*/
|
|
51 |
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*4*/
|
|
52 |
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*5*/
|
|
53 |
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*6*/
|
|
54 |
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*7*/
|
|
55 |
||
56 |
||
57 |
LEGEND:
|
|
58 |
0..127 VALID NUMBER.
|
|
59 |
||
60 |
-1 INVALID
|
|
61 |
||
62 |
-2 IGNORE
|
|
63 |
||
64 |
-3 PADDING MARK
|
|
65 |
||
66 |
||
67 |
Padding mark is only not used in Base16, so it will generate an error.
|
|
68 |
||
69 |
#endif
|
|
70 |
||
71 |
||
90
by Gustav Hartvigsson
* Macros were wrong. |
72 |
/* ****************************************************************************
|
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
73 |
********************************* BASE 16 ************************************
|
90
by Gustav Hartvigsson
* Macros were wrong. |
74 |
**************************************************************************** */
|
89
by Gustav Hartvigsson
* Started working on Threads |
75 |
|
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
76 |
S_UNUSED
|
89
by Gustav Hartvigsson
* Started working on Threads |
77 |
static const schar |
78 |
S_BASE_16_ALPHABET[16] = { |
|
79 |
'0','1','2','3','4','5','6','7','8','9', |
|
121.1.3
by Gustav Hartvigsson
* Made the GC switchable at rutime (once) when compiled with S_USE_GC set. |
80 |
|
89
by Gustav Hartvigsson
* Started working on Threads |
81 |
'A','B','C','D','E','F' |
82 |
};
|
|
83 |
||
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
84 |
S_UNUSED
|
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
85 |
static const sbyte |
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
86 |
S_BASE_16_REVERSE[128] = { |
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
87 |
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
|
88 |
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*0*/ |
|
89 |
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*1*/ |
|
90 |
-2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*2*/ |
|
91 |
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, /*3*/ |
|
92 |
-1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*4*/ |
|
93 |
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*5*/ |
|
94 |
-1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*6*/ |
|
95 |
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*7*/ |
|
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
96 |
};
|
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
97 |
|
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
98 |
#define base_16_concat(first,last) ((last) | (first << 4))
|
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
99 |
#define base_16_mask_shift(byte) ((byte & 0xf0) >> 4)
|
160
by Gustav Hartvigsson
Fixed Base16 encoding and decoding |
100 |
#define base_16_mask(byte) (byte & 0x0f)
|
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
101 |
|
102 |
schar * |
|
100
by Gustav Hartvigsson
* Fixed README. |
103 |
s_base_16_enc (const sbyte * input_data, |
104 |
size_t in_len, |
|
105 |
size_t * out_len) { |
|
150
by Gustav Hartvigsson
* Fixed the tests in the CMake file |
106 |
|
160
by Gustav Hartvigsson
Fixed Base16 encoding and decoding |
107 |
*out_len = (in_len * 2); |
150
by Gustav Hartvigsson
* Fixed the tests in the CMake file |
108 |
|
160
by Gustav Hartvigsson
Fixed Base16 encoding and decoding |
109 |
schar * ret_val = s_malloc ((*out_len) + 1); |
150
by Gustav Hartvigsson
* Fixed the tests in the CMake file |
110 |
|
111 |
s_dbg_print ("in len: %zu out_len: %zu\n", in_len, *out_len); |
|
112 |
|
|
160
by Gustav Hartvigsson
Fixed Base16 encoding and decoding |
113 |
ret_val[*out_len] = '\0'; |
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
114 |
|
115 |
size_t pos = 0; |
|
116 |
|
|
160
by Gustav Hartvigsson
Fixed Base16 encoding and decoding |
117 |
for (sint i = 0; i < in_len; i++) { |
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
118 |
subyte m_byte = (subyte)input_data[i]; |
119 |
ret_val [pos] = S_BASE_16_ALPHABET[base_16_mask_shift(m_byte)]; |
|
120 |
ret_val [pos+1] = S_BASE_16_ALPHABET[base_16_mask(m_byte)]; |
|
121 |
pos += 2; |
|
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
122 |
} |
160
by Gustav Hartvigsson
Fixed Base16 encoding and decoding |
123 |
|
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
124 |
return ret_val; |
125 |
}
|
|
126 |
||
127 |
sbyte * |
|
100
by Gustav Hartvigsson
* Fixed README. |
128 |
s_base_16_dec (const schar * base16_str, |
129 |
size_t in_len, |
|
130 |
size_t * out_len) { |
|
162
by Gustav Hartvigsson
* stuff to do with the unfinished base32 implementation. |
131 |
EARLY_EXIT_ON_LEN_ZERO (in_len, *out_len); |
161
by Gustav Hartvigsson
Base16[enc,dec] - Can now create byte arrays of fixed size. |
132 |
*out_len = (round_up ((in_len / 2), 2) + 1); |
133 |
return s_base_16_dec_size (base16_str, in_len, *out_len); |
|
134 |
}
|
|
135 |
||
136 |
sbyte * |
|
137 |
s_base_16_dec_size (const schar * base16_str, |
|
138 |
size_t in_len, |
|
139 |
size_t out_len) { |
|
162
by Gustav Hartvigsson
* stuff to do with the unfinished base32 implementation. |
140 |
EARLY_EXIT_ON_LEN_ZERO (in_len, out_len); |
160
by Gustav Hartvigsson
Fixed Base16 encoding and decoding |
141 |
sbyte * ptr = (sbyte *) base16_str; |
161
by Gustav Hartvigsson
Base16[enc,dec] - Can now create byte arrays of fixed size. |
142 |
sbyte * endptr = ptr + in_len; |
143 |
sbyte * ret_val = s_malloc (sizeof(sbyte) * (out_len)); |
|
160
by Gustav Hartvigsson
Fixed Base16 encoding and decoding |
144 |
|
145 |
subyte first; |
|
146 |
subyte second; |
|
147 |
subyte concat; |
|
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
148 |
|
149 |
size_t pos = 0; |
|
150 |
|
|
160
by Gustav Hartvigsson
Fixed Base16 encoding and decoding |
151 |
|
152 |
//s_dbg_print ("first,\t second,\t concat\n"); |
|
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
153 |
while (ptr != endptr) { |
150
by Gustav Hartvigsson
* Fixed the tests in the CMake file |
154 |
if (S_BASE_16_REVERSE[(size_t)*ptr] < 0) { |
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
155 |
s_err_print ("Unclean Base16 data.\n"); |
156 |
} |
|
157 |
|
|
160
by Gustav Hartvigsson
Fixed Base16 encoding and decoding |
158 |
first = *ptr++; |
159 |
second = *ptr++; |
|
160 |
concat = base_16_concat(S_BASE_16_REVERSE[first], |
|
162
by Gustav Hartvigsson
* stuff to do with the unfinished base32 implementation. |
161 |
S_BASE_16_REVERSE[second]); |
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
162 |
|
160
by Gustav Hartvigsson
Fixed Base16 encoding and decoding |
163 |
//s_dbg_print ("%02x (%d),\t %02x (%d),\t %02x (%d)\n",first ,first, second, second, concat, concat); |
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
164 |
|
165 |
|
|
166 |
ret_val[pos] = concat; |
|
160
by Gustav Hartvigsson
Fixed Base16 encoding and decoding |
167 |
pos++; |
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
168 |
} |
169 |
|
|
170 |
return ret_val; |
|
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
171 |
}
|
172 |
||
173 |
/* ****************************************************************************
|
|
174 |
********************************* BASE 32 ************************************
|
|
175 |
**************************************************************************** */
|
|
176 |
||
89
by Gustav Hartvigsson
* Started working on Threads |
177 |
|
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
178 |
S_UNUSED
|
89
by Gustav Hartvigsson
* Started working on Threads |
179 |
static const schar |
180 |
S_BASE_32_ALPHABET[32] = { |
|
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
181 |
/* 0 1 2 3 4 5 6 7 8 9 */
|
182 |
'A','B','C','D','E','F','G','H','I','J', |
|
183 |
'K','L','M','N','O','P','Q','R','S','T', |
|
184 |
'U','V','W','X','Y','Z', |
|
185 |
'2','3','4','5', |
|
186 |
'6','7' |
|
187 |
};
|
|
188 |
||
189 |
||
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
190 |
S_UNUSED
|
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
191 |
static const sbyte |
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
192 |
S_BASE_32_REVERSE[128] = { |
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
193 |
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
|
194 |
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*0*/ |
|
195 |
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*1*/ |
|
196 |
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*2*/ |
|
197 |
-1, -1, 27, 28, 29, 30, 31, 32, -1, -1, -1, -1, -1, -3, -1, -1, /*3*/ |
|
198 |
-1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, /*4*/ |
|
199 |
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, -1, -1, -1, /*5*/ |
|
200 |
-1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, /*6*/ |
|
201 |
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, -1, -1, -1, /*7*/ |
|
202 |
};
|
|
203 |
||
162
by Gustav Hartvigsson
* stuff to do with the unfinished base32 implementation. |
204 |
#define base_32_mask(byte) (byte & 0x1F)
|
205 |
||
206 |
#define base_32_get_offset(block) (8 - 5 - (5 * block) % 8)
|
|
207 |
||
208 |
#define base_32_shift_right(byte, offset)\
|
|
209 |
((offset) > 0) ? (byte >> (offset)) :\
|
|
210 |
(byte << (-(offset)))
|
|
211 |
||
212 |
#define base_32_shift_left(byte, offset)\
|
|
213 |
((offset) > 0) ? (byte << (offset)) :\
|
|
214 |
(byte >> (-(offset)))
|
|
215 |
||
216 |
#define base_32_get_octet(block) ((block*5) / 8)
|
|
217 |
||
218 |
sint
|
|
219 |
_base_32_decode_sequence (const schar * sequence, |
|
220 |
sbyte * out, |
|
221 |
const sbyte reverse_table[]) { |
|
222 |
sint offset, |
|
223 |
octet; |
|
224 |
sbyte c, |
|
225 |
r; |
|
226 |
out[0] = 0; |
|
227 |
for (sint b = 0; b < 8; b++) { |
|
228 |
offset = base_32_get_offset (b); |
|
229 |
octet = base_32_get_octet (b); |
|
230 |
r = sequence[b]; |
|
231 |
c = reverse_table[r]; |
|
232 |
if (c < 0) { // invalid char. |
|
233 |
return octet; |
|
234 |
} |
|
235 |
out[octet] |= base_32_shift_left (c, offset); |
|
236 |
if (offset < 0) { |
|
237 |
out[octet + 1] = base_32_shift_left (c, offset + 8); |
|
238 |
} |
|
239 |
} |
|
240 |
return 5; |
|
241 |
}
|
|
242 |
||
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
243 |
/* TODO */
|
90
by Gustav Hartvigsson
* Macros were wrong. |
244 |
schar * |
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
245 |
s_base_32_enc (const sbyte * input_data, |
100
by Gustav Hartvigsson
* Fixed README. |
246 |
size_t in_len, |
247 |
size_t * out_len); |
|
90
by Gustav Hartvigsson
* Macros were wrong. |
248 |
|
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
249 |
/* TODO */
|
90
by Gustav Hartvigsson
* Macros were wrong. |
250 |
sbyte * |
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
251 |
s_base_32_dec (const schar * base32_str, |
100
by Gustav Hartvigsson
* Fixed README. |
252 |
size_t in_len, |
162
by Gustav Hartvigsson
* stuff to do with the unfinished base32 implementation. |
253 |
size_t * out_len) { |
254 |
EARLY_EXIT_ON_LEN_ZERO (in_len, *out_len); |
|
255 |
*out_len = in_len; |
|
256 |
return s_base_32_dec_size (base32_str, |
|
257 |
in_len, |
|
258 |
*out_len); |
|
259 |
}
|
|
260 |
||
261 |
/* TODO */
|
|
262 |
sbyte * |
|
263 |
s_base_32_dec_size (const schar * base32_str, |
|
264 |
size_t in_len, |
|
265 |
size_t out_len) { |
|
266 |
EARLY_EXIT_ON_LEN_ZERO (in_len, out_len); |
|
267 |
sbyte * ret_val = s_malloc (out_len); |
|
268 |
|
|
269 |
|
|
270 |
|
|
271 |
return ret_val; |
|
272 |
}
|
|
273 |
||
90
by Gustav Hartvigsson
* Macros were wrong. |
274 |
|
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
275 |
/* * BASE 32 HEX * */
|
276 |
||
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
277 |
S_UNUSED
|
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
278 |
static const schar |
279 |
S_BASE_32_HEX_ALPHABET[32] = { |
|
280 |
/* 0 1 2 3 4 5 6 7 8 9 */
|
|
281 |
'0','1','2','3','4','5','6','7','8','9', |
|
121.1.3
by Gustav Hartvigsson
* Made the GC switchable at rutime (once) when compiled with S_USE_GC set. |
282 |
|
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
283 |
'A','B','C','D','E','F','G','H','I','J', |
284 |
'K','L','M','N','O','P','Q','R','S','T', |
|
285 |
'U','V' |
|
286 |
};
|
|
287 |
||
288 |
||
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
289 |
S_UNUSED
|
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
290 |
static const sbyte |
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
291 |
S_BASE_32_HEX_REVERSE[128] = { |
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
292 |
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
|
293 |
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*0*/ |
|
294 |
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*1*/ |
|
295 |
-2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*2*/ |
|
296 |
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, /*3*/ |
|
297 |
-1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, /*4*/ |
|
298 |
25, 26, 27, 28, 29, 30, 31, 31, -1, -1, -1, -1, -1, -1, -1, -1, /*5*/ |
|
299 |
-1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, /*7*/ |
|
300 |
25, 26, 27, 28, 29, 30, 31, 31, -1, -1, -1, -1, -1, -1, -1, -1, /*8*/ |
|
301 |
};
|
|
302 |
||
303 |
/* TODO */
|
|
90
by Gustav Hartvigsson
* Macros were wrong. |
304 |
schar * |
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
305 |
s_base_32_hex_enc (const sbyte * input_data, |
100
by Gustav Hartvigsson
* Fixed README. |
306 |
size_t in_len, |
307 |
size_t * out_len); |
|
90
by Gustav Hartvigsson
* Macros were wrong. |
308 |
|
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
309 |
/* TODO */
|
90
by Gustav Hartvigsson
* Macros were wrong. |
310 |
sbyte * |
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
311 |
s_base_32_hex_dec (const schar * base32_str, |
100
by Gustav Hartvigsson
* Fixed README. |
312 |
size_t in_len, |
313 |
size_t * out_len); |
|
90
by Gustav Hartvigsson
* Macros were wrong. |
314 |
|
162
by Gustav Hartvigsson
* stuff to do with the unfinished base32 implementation. |
315 |
/* TODO */
|
316 |
sbyte * |
|
317 |
s_base_32_hex_dec_size (const schar * base32_str, |
|
318 |
size_t in_len, |
|
319 |
size_t * out_len); |
|
320 |
||
90
by Gustav Hartvigsson
* Macros were wrong. |
321 |
|
322 |
/* ****************************************************************************
|
|
323 |
********************************* BASE 64 ************************************
|
|
324 |
**************************************************************************** */
|
|
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
325 |
|
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
326 |
S_UNUSED
|
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
327 |
static const schar |
328 |
S_BASE_64_ALPHABET[64] = { |
|
329 |
/* 0 1 2 3 4 5 6 7 8 9 */
|
|
330 |
'A','B','C','D','E','F','G','H','I','J', |
|
331 |
'K','L','M','N','O','P','Q','R','S','T', |
|
332 |
'U','V','W','X','Y','Z', |
|
333 |
'a','b','c','d', |
|
334 |
'e','f','g','h','i','j','k','l','m','n', |
|
335 |
'o','p','q','r','s','t','u','v','w','x', |
|
336 |
'y','z', |
|
337 |
'0','1','2','3','4','5','6','7', |
|
338 |
'8','9', |
|
339 |
'+','/' |
|
340 |
};
|
|
341 |
||
342 |
/* TODO */
|
|
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
343 |
S_UNUSED
|
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
344 |
static const sbyte |
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
345 |
S_BASE_64_REVERSE[128] = { |
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
346 |
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
|
347 |
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*0*/ |
|
348 |
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*1*/ |
|
349 |
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, -1, -1, 64, /*2*/ |
|
350 |
53, 54, 55, 56, 57, 58, 59, 60, 61, 62, -1, -1, -1, -3, -1, -1, /*3*/ |
|
351 |
-1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, /*4*/ |
|
352 |
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, -1, -1, -1, /*5*/ |
|
353 |
-1, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, /*6*/ |
|
354 |
42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, -1, -1, -1, -1, -1, /*7*/ |
|
355 |
};
|
|
356 |
||
90
by Gustav Hartvigsson
* Macros were wrong. |
357 |
schar * |
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
358 |
s_base_64_enc (const sbyte * input_data, |
100
by Gustav Hartvigsson
* Fixed README. |
359 |
size_t in_len, |
360 |
size_t * out_len); |
|
90
by Gustav Hartvigsson
* Macros were wrong. |
361 |
|
362 |
sbyte * |
|
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
363 |
s_base_64_dec (const schar * base64_str, |
100
by Gustav Hartvigsson
* Fixed README. |
364 |
size_t in_len, |
365 |
size_t * out_len); |
|
90
by Gustav Hartvigsson
* Macros were wrong. |
366 |
|
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
367 |
/* * BASE 64 SAFE * */
|
368 |
||
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
369 |
S_UNUSED
|
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
370 |
static const schar |
371 |
S_BASE_64_SAFE_ALPHABET[64] = { |
|
372 |
/* 0 1 2 3 4 5 6 7 8 9 */
|
|
373 |
'A','B','C','D','E','F','G','H','I','J', |
|
374 |
'K','L','M','N','O','P','Q','R','S','T', |
|
375 |
'U','V','W','X','Y','Z', |
|
376 |
'a','b','c','d', |
|
377 |
'e','f','g','h','i','j','k','l','m','n', |
|
378 |
'o','p','q','r','s','t','u','v','w','x', |
|
379 |
'y','z', |
|
380 |
'0','1','2','3','4','5','6','7', |
|
381 |
'8','9', |
|
382 |
'-','_' |
|
383 |
};
|
|
384 |
||
385 |
/* TODO */
|
|
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
386 |
S_UNUSED
|
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
387 |
static const sbyte |
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
388 |
S_BASE_64_SAFE_REVERSE[128] = { |
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
389 |
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
|
390 |
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*0*/ |
|
391 |
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*1*/ |
|
392 |
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, -1, /*2*/ |
|
393 |
53, 54, 55, 56, 57, 58, 59, 60, 61, 62, -1, -1, -1, -3, -1, -1, /*3*/ |
|
394 |
-1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, /*4*/ |
|
395 |
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, -1, -1, 64, /*5*/ |
|
396 |
-1, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, /*6*/ |
|
397 |
42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, -1, -1, -1, -1, -1, /*7*/ |
|
398 |
};
|
|
399 |
||
400 |
/* TODO */
|
|
90
by Gustav Hartvigsson
* Macros were wrong. |
401 |
schar * |
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
402 |
s_base_64_safe_enc (const sbyte * input_data, |
100
by Gustav Hartvigsson
* Fixed README. |
403 |
size_t in_len, |
404 |
size_t * out_len); |
|
90
by Gustav Hartvigsson
* Macros were wrong. |
405 |
|
95
by Gustav Hartvigsson
* Added S_BASE_*_REVERSE |
406 |
/* TODO */
|
90
by Gustav Hartvigsson
* Macros were wrong. |
407 |
sbyte * |
138
by Gustav Hartvigsson
* Fixed s_base_16_enc |
408 |
s_base_64_safe_dec (const schar * base64_str, |
100
by Gustav Hartvigsson
* Fixed README. |
409 |
size_t in_len, |
410 |
size_t * out_len); |
|
90
by Gustav Hartvigsson
* Macros were wrong. |
411 |