iPXE
base16.h
Go to the documentation of this file.
1 #ifndef _IPXE_BASE16_H
2 #define _IPXE_BASE16_H
3 
4 /** @file
5  *
6  * Base16 encoding
7  *
8  */
9 
10 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11 FILE_SECBOOT ( PERMITTED );
12 
13 #include <stdint.h>
14 #include <string.h>
15 
16 /** Treat separator as optional while decoding */
17 #define HEX_DECODE_OPTIONAL 0x80
18 
19 /**
20  * Calculate length of base16-encoded data
21  *
22  * @v raw_len Raw data length
23  * @ret encoded_len Encoded string length (excluding NUL)
24  */
25 static inline size_t base16_encoded_len ( size_t raw_len ) {
26  return ( 2 * raw_len );
27 }
28 
29 /**
30  * Calculate maximum length of base16-decoded string
31  *
32  * @v encoded Encoded string
33  * @v max_raw_len Maximum length of raw data
34  */
35 static inline size_t base16_decoded_max_len ( const char *encoded ) {
36  return ( ( strlen ( encoded ) + 1 ) / 2 );
37 }
38 
39 extern size_t hex_encode ( char separator, const void *raw, size_t raw_len,
40  char *data, size_t len );
41 extern int hex_decode ( char separator, const char *encoded, void *data,
42  size_t len );
43 
44 /**
45  * Base16-encode data
46  *
47  * @v raw Raw data
48  * @v raw_len Length of raw data
49  * @v data Buffer
50  * @v len Length of buffer
51  * @ret len Encoded length
52  */
53 static inline __attribute__ (( always_inline )) size_t
54 base16_encode ( const void *raw, size_t raw_len, char *data, size_t len ) {
55  return hex_encode ( 0, raw, raw_len, data, len );
56 }
57 
58 /**
59  * Base16-decode data
60  *
61  * @v encoded Encoded string
62  * @v data Buffer
63  * @v len Length of buffer
64  * @ret len Length of data, or negative error
65  */
66 static inline __attribute__ (( always_inline )) int
67 base16_decode ( const char *encoded, void *data, size_t len ) {
68  return hex_decode ( 0, encoded, data, len );
69 }
70 
71 #endif /* _IPXE_BASE16_H */
static size_t base16_decoded_max_len(const char *encoded)
Calculate maximum length of base16-decoded string.
Definition: base16.h:35
size_t hex_encode(char separator, const void *raw, size_t raw_len, char *data, size_t len)
Encode hexadecimal string (with optional byte separator character)
Definition: base16.c:51
FILE_SECBOOT(PERMITTED)
static __attribute__((always_inline)) size_t base16_encode(const void *raw
Base16-encode data.
static size_t base16_encoded_len(size_t raw_len)
Calculate length of base16-encoded data.
Definition: base16.h:25
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
int hex_decode(char separator, const char *encoded, void *data, size_t len)
Decode hexadecimal string (with optional byte separator character)
Definition: base16.c:77
static size_t raw_len
Definition: base16.h:54
size_t strlen(const char *src)
Get length of string.
Definition: string.c:244
static size_t char size_t len
Definition: base16.h:54
static size_t char * data
Definition: base16.h:54
__be32 raw[7]
Definition: CIB_PRM.h:28
String functions.