File: hex.h

package info (click to toggle)
gnutls28 3.8.12-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 82,380 kB
  • sloc: ansic: 392,233; asm: 117,804; sh: 18,758; makefile: 6,804; yacc: 1,858; python: 1,399; cpp: 1,243; perl: 995; sed: 39
file content (77 lines) | stat: -rw-r--r-- 1,946 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/* CC0 (Public domain) - see LICENSE file for details */

#ifndef GNUTLS_LIB_EXTRAS_HEX_H
#define GNUTLS_LIB_EXTRAS_HEX_H

#include "config.h"
#include <stdbool.h>
#include <stdlib.h>

/**
 * hex_decode - Unpack a hex string.
 * @str: the hexadecimal string
 * @slen: the length of @str
 * @buf: the buffer to write the data into
 * @bufsize: the length of @buf
 *
 * Returns false if there are any characters which aren't 0-9, a-f or A-F,
 * of the string wasn't the right length for @bufsize.
 *
 * Example:
 *	unsigned char data[20];
 *
 *	if (!hex_decode(argv[1], strlen(argv[1]), data, 20))
 *		printf("String is malformed!\n");
 */

bool hex_decode(const char *str, size_t slen, void *buf, size_t bufsize);

/**
 * hex_encode - Create a nul-terminated hex string
 * @buf: the buffer to read the data from
 * @bufsize: the length of @buf
 * @dest: the string to fill
 * @destsize: the max size of the string
 *
 * Returns true if the string, including terminator, fit in @destsize;
 *
 * Example:
 *	unsigned char buf[] = { 0x1F, 0x2F };
 *	char str[5];
 *
 *	if (!hex_encode(buf, sizeof(buf), str, sizeof(str)))
 *		abort();
 */
bool hex_encode(const void *buf, size_t bufsize, char *dest, size_t destsize);

/**
 * hex_str_size - Calculate how big a nul-terminated hex string is
 * @bytes: bytes of data to represent
 *
 * Example:
 *	unsigned char buf[] = { 0x1F, 0x2F };
 *	char str[hex_str_size(sizeof(buf))];
 *
 *	hex_encode(buf, sizeof(buf), str, sizeof(str));
 */
static inline size_t hex_str_size(size_t bytes)
{
	return 2 * bytes + 1;
}

/**
 * hex_data_size - Calculate how many bytes of data in a hex string
 * @strlen: the length of the string (with or without NUL)
 *
 * Example:
 *	const char str[] = "1F2F";
 *	unsigned char buf[hex_data_size(sizeof(str))];
 *
 *	hex_decode(str, strlen(str), buf, sizeof(buf));
 */
static inline size_t hex_data_size(size_t slen)
{
	return slen / 2;
}

#endif /* GNUTLS_LIB_EXTRAS_HEX_H */