annotate src/lib/base32.h @ 23007:36e01285b5b8

lib: buffer - Improve header comment for buffer_insert() and buffer_delete().
author Stephan Bosch <stephan.bosch@dovecot.fi>
date Mon, 18 Mar 2019 00:52:37 +0100
parents 1663b76430e1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18098
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
1 #ifndef BASE32_H
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
2 #define BASE32_H
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
3
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
4 /* Translates binary data into base32 (RFC 4648, Section 6). The src must not
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
5 point to dest buffer. The pad argument determines whether output is padded
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
6 with '='.
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
7 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
8 void base32_encode(bool pad, const void *src, size_t src_size,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
9 buffer_t *dest);
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
10
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
11 /* Translates binary data into base32hex (RFC 4648, Section 7). The src must
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
12 not point to dest buffer. The pad argument determines whether output is
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
13 padded with '='.
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
14 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
15 void base32hex_encode(bool pad, const void *src, size_t src_size,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
16 buffer_t *dest);
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
17
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
18 /* Translates base32/base32hex data into binary and appends it to dest buffer.
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
19 dest may point to same buffer as src. Returns 1 if all ok, 0 if end of
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
20 base32 data found, -1 if data is invalid.
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
21
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
22 Any whitespace characters are ignored.
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
23
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
24 This function may be called multiple times for parsing the same stream.
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
25 If src_pos is non-NULL, it's updated to first non-translated character in
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
26 src. */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
27 int base32_decode(const void *src, size_t src_size,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
28 size_t *src_pos_r, buffer_t *dest) ATTR_NULL(4);
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
29 int base32hex_decode(const void *src, size_t src_size,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
30 size_t *src_pos_r, buffer_t *dest) ATTR_NULL(4);
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
31
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
32 /* Decode given string to a buffer allocated from data stack. */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
33 buffer_t *t_base32_decode_str(const char *str);
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
34 buffer_t *t_base32hex_decode_str(const char *str);
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
35
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
36 /* Returns TRUE if c is a valid base32 encoding character (excluding '=') */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
37 bool base32_is_valid_char(char c);
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
38 bool base32hex_is_valid_char(char c);
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
39
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
40 /* max. buffer size required for base32_encode()/base32hex_encode() */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
41 #define MAX_BASE32_ENCODED_SIZE(size) \
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
42 ((size) / 5 * 8 + 8)
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
43 /* max. buffer size required for base32_decode()/base32hex_decode() */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
44 #define MAX_BASE32_DECODED_SIZE(size) \
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
45 ((size) / 8 * 5 + 5)
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
46
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
47 #endif