1 /**
2  * Author......: See docs/credits.txt
3  * License.....: MIT
4  */
5 
6 #ifndef _CONVERT_H
7 #define _CONVERT_H
8 
9 #include <ctype.h>
10 
11 bool is_hexify (const u8 *buf, const size_t len);
12 size_t exec_unhexify (const u8 *in_buf, const size_t in_len, u8 *out_buf, const size_t out_sz);
13 
14 bool need_hexify (const u8 *buf, const size_t len, const char separator, bool always_ascii);
15 void exec_hexify (const u8 *buf, const size_t len, u8 *out);
16 
17 bool is_valid_base64a_string  (const u8 *s, const size_t len);
18 bool is_valid_base64a_char    (const u8 c);
19 bool is_valid_base64b_string  (const u8 *s, const size_t len);
20 bool is_valid_base64b_char    (const u8 c);
21 bool is_valid_base64c_string  (const u8 *s, const size_t len);
22 bool is_valid_base64c_char    (const u8 c);
23 bool is_valid_hex_string      (const u8 *s, const size_t len);
24 bool is_valid_hex_char        (const u8 c);
25 bool is_valid_digit_string    (const u8 *s, const size_t len);
26 bool is_valid_digit_char      (const u8 c);
27 bool is_valid_float_string    (const u8 *s, const size_t len);
28 bool is_valid_float_char      (const u8 c);
29 
30 u8 hex_convert (const u8 c);
31 
32 u8  hex_to_u8  (const u8 hex[2]);
33 u32 hex_to_u32 (const u8 hex[8]);
34 u64 hex_to_u64 (const u8 hex[16]);
35 
36 void u8_to_hex  (const u8  v, u8 hex[2]);
37 void u32_to_hex (const u32 v, u8 hex[8]);
38 void u64_to_hex (const u64 v, u8 hex[16]);
39 
40 u8 int_to_base32    (const u8 c);
41 u8 base32_to_int    (const u8 c);
42 u8 int_to_base64    (const u8 c);
43 u8 base64_to_int    (const u8 c);
44 u8 int_to_ab64      (const u8 c);
45 u8 ab64_to_int      (const u8 c);
46 u8 int_to_base64url (const u8 c);
47 u8 base64url_to_int (const u8 c);
48 u8 int_to_itoa32    (const u8 c);
49 u8 itoa32_to_int    (const u8 c);
50 u8 int_to_itoa64    (const u8 c);
51 u8 itoa64_to_int    (const u8 c);
52 u8 int_to_bf64      (const u8 c);
53 u8 bf64_to_int      (const u8 c);
54 u8 int_to_lotus64   (const u8 c);
55 u8 lotus64_to_int   (const u8 c);
56 
57 size_t base32_decode (u8 (*f) (const u8), const u8 *in_buf, const size_t in_len, u8 *out_buf);
58 size_t base32_encode (u8 (*f) (const u8), const u8 *in_buf, const size_t in_len, u8 *out_buf);
59 size_t base64_decode (u8 (*f) (const u8), const u8 *in_buf, const size_t in_len, u8 *out_buf);
60 size_t base64_encode (u8 (*f) (const u8), const u8 *in_buf, const size_t in_len, u8 *out_buf);
61 
62 void lowercase (u8 *buf, const size_t len);
63 void uppercase (u8 *buf, const size_t len);
64 
65 u8 v8a_from_v32 (const u32 v32);
66 u8 v8b_from_v32 (const u32 v32);
67 u8 v8c_from_v32 (const u32 v32);
68 u8 v8d_from_v32 (const u32 v32);
69 
70 u16 v16a_from_v32 (const u32 v32);
71 u16 v16b_from_v32 (const u32 v32);
72 u32 v32_from_v16ab (const u16 v16a, const u16 v16b);
73 
74 u32 v32a_from_v64 (const u64 v64);
75 u32 v32b_from_v64 (const u64 v64);
76 u64 v64_from_v32ab (const u32 v32a, const u32 v32b);
77 
78 int hex_decode (const u8 *in_buf, const int in_len, u8 *out_buf);
79 int hex_encode (const u8 *in_buf, const int in_len, u8 *out_buf);
80 
81 #endif // _CONVERT_H
82