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
10FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11FILE_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 */
25static 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 */
35static inline size_t base16_decoded_max_len ( const char *encoded ) {
36 return ( ( strlen ( encoded ) + 1 ) / 2 );
37}
38
39extern size_t hex_encode ( char separator, const void *raw, size_t raw_len,
40 char *data, size_t len );
41extern 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 */
53static inline __attribute__ (( always_inline )) size_t
54base16_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 */
66static inline __attribute__ (( always_inline )) int
67base16_decode ( const char *encoded, void *data, size_t len ) {
68 return hex_decode ( 0, encoded, data, len );
69}
70
71#endif /* _IPXE_BASE16_H */
__be32 raw[7]
Definition CIB_PRM.h:0
static size_t base16_encoded_len(size_t raw_len)
Calculate length of base16-encoded data.
Definition base16.h:25
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
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
static size_t base16_decoded_max_len(const char *encoded)
Calculate maximum length of base16-decoded string.
Definition base16.h:35
static size_t raw_len
Definition base16.h:54
ring len
Length.
Definition dwmac.h:226
uint8_t data[48]
Additional event data.
Definition ena.h:11
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
Definition compiler.h:896
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
Definition compiler.h:926
#define __attribute__(x)
Definition compiler.h:10
String functions.
size_t strlen(const char *src)
Get length of string.
Definition string.c:244