/src/gnutls/lib/extras/hex.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* CC0 (Public domain) - see LICENSE file for details */ |
2 | | |
3 | | #ifndef GNUTLS_LIB_EXTRAS_HEX_H |
4 | | #define GNUTLS_LIB_EXTRAS_HEX_H |
5 | | |
6 | | #include "config.h" |
7 | | #include <stdbool.h> |
8 | | #include <stdlib.h> |
9 | | |
10 | | /** |
11 | | * hex_decode - Unpack a hex string. |
12 | | * @str: the hexadecimal string |
13 | | * @slen: the length of @str |
14 | | * @buf: the buffer to write the data into |
15 | | * @bufsize: the length of @buf |
16 | | * |
17 | | * Returns false if there are any characters which aren't 0-9, a-f or A-F, |
18 | | * of the string wasn't the right length for @bufsize. |
19 | | * |
20 | | * Example: |
21 | | * unsigned char data[20]; |
22 | | * |
23 | | * if (!hex_decode(argv[1], strlen(argv[1]), data, 20)) |
24 | | * printf("String is malformed!\n"); |
25 | | */ |
26 | | |
27 | | bool hex_decode(const char *str, size_t slen, void *buf, size_t bufsize); |
28 | | |
29 | | /** |
30 | | * hex_encode - Create a nul-terminated hex string |
31 | | * @buf: the buffer to read the data from |
32 | | * @bufsize: the length of @buf |
33 | | * @dest: the string to fill |
34 | | * @destsize: the max size of the string |
35 | | * |
36 | | * Returns true if the string, including terminator, fit in @destsize; |
37 | | * |
38 | | * Example: |
39 | | * unsigned char buf[] = { 0x1F, 0x2F }; |
40 | | * char str[5]; |
41 | | * |
42 | | * if (!hex_encode(buf, sizeof(buf), str, sizeof(str))) |
43 | | * abort(); |
44 | | */ |
45 | | bool hex_encode(const void *buf, size_t bufsize, char *dest, size_t destsize); |
46 | | |
47 | | /** |
48 | | * hex_str_size - Calculate how big a nul-terminated hex string is |
49 | | * @bytes: bytes of data to represent |
50 | | * |
51 | | * Example: |
52 | | * unsigned char buf[] = { 0x1F, 0x2F }; |
53 | | * char str[hex_str_size(sizeof(buf))]; |
54 | | * |
55 | | * hex_encode(buf, sizeof(buf), str, sizeof(str)); |
56 | | */ |
57 | | static inline size_t hex_str_size(size_t bytes) |
58 | 0 | { |
59 | 0 | return 2 * bytes + 1; |
60 | 0 | } Unexecuted instantiation: str.c:hex_str_size Unexecuted instantiation: fips.c:hex_str_size Unexecuted instantiation: common.c:hex_str_size Unexecuted instantiation: time.c:hex_str_size Unexecuted instantiation: hex.c:hex_str_size |
61 | | |
62 | | /** |
63 | | * hex_data_size - Calculate how many bytes of data in a hex string |
64 | | * @strlen: the length of the string (with or without NUL) |
65 | | * |
66 | | * Example: |
67 | | * const char str[] = "1F2F"; |
68 | | * unsigned char buf[hex_data_size(sizeof(str))]; |
69 | | * |
70 | | * hex_decode(str, strlen(str), buf, sizeof(buf)); |
71 | | */ |
72 | | static inline size_t hex_data_size(size_t slen) |
73 | 0 | { |
74 | 0 | return slen / 2; |
75 | 0 | } Unexecuted instantiation: str.c:hex_data_size Unexecuted instantiation: fips.c:hex_data_size Unexecuted instantiation: common.c:hex_data_size Unexecuted instantiation: time.c:hex_data_size Unexecuted instantiation: hex.c:hex_data_size |
76 | | |
77 | | #endif /* GNUTLS_LIB_EXTRAS_HEX_H */ |