From bc83e4b5d3bd408cdab252715f7e269db174ecbe Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Fri, 28 May 2010 14:58:04 +0100 Subject: [base16] Add generic base16 encoding and decoding routines Base16 encoding is currently implemented in both iSCSI and SRP. Signed-off-by: Michael Brown --- src/include/ipxe/base16.h | 38 ++++++++++++++++++++++++++++++++++++++ src/include/ipxe/errfile.h | 1 + 2 files changed, 39 insertions(+) create mode 100644 src/include/ipxe/base16.h (limited to 'src/include/ipxe') diff --git a/src/include/ipxe/base16.h b/src/include/ipxe/base16.h new file mode 100644 index 000000000..f0c9842f9 --- /dev/null +++ b/src/include/ipxe/base16.h @@ -0,0 +1,38 @@ +#ifndef _IPXE_BASE16_H +#define _IPXE_BASE16_H + +/** @file + * + * Base16 encoding + * + */ + +FILE_LICENCE ( GPL2_OR_LATER ); + +#include +#include + +/** + * Calculate length of base16-encoded data + * + * @v raw_len Raw data length + * @ret encoded_len Encoded string length (excluding NUL) + */ +static inline size_t base16_encoded_len ( size_t raw_len ) { + return ( 2 * raw_len ); +} + +/** + * Calculate maximum length of base16-decoded string + * + * @v encoded Encoded string + * @v max_raw_len Maximum length of raw data + */ +static inline size_t base16_decoded_max_len ( const char *encoded ) { + return ( ( strlen ( encoded ) + 1 ) / 2 ); +} + +extern void base16_encode ( const uint8_t *raw, size_t len, char *encoded ); +extern int base16_decode ( const char *encoded, uint8_t *raw ); + +#endif /* _IPXE_BASE16_H */ diff --git a/src/include/ipxe/errfile.h b/src/include/ipxe/errfile.h index c62a5b7d3..2bb655fd7 100644 --- a/src/include/ipxe/errfile.h +++ b/src/include/ipxe/errfile.h @@ -54,6 +54,7 @@ FILE_LICENCE ( GPL2_OR_LATER ); #define ERRFILE_xfer ( ERRFILE_CORE | 0x000e0000 ) #define ERRFILE_bitmap ( ERRFILE_CORE | 0x000f0000 ) #define ERRFILE_base64 ( ERRFILE_CORE | 0x00100000 ) +#define ERRFILE_base16 ( ERRFILE_CORE | 0x00110000 ) #define ERRFILE_eisa ( ERRFILE_DRIVER | 0x00000000 ) #define ERRFILE_isa ( ERRFILE_DRIVER | 0x00010000 ) -- cgit v1.2.3-55-g7522