1 #ifndef _IPXE_BASE64_H
2 #define _IPXE_BASE64_H
3 
4 /** @file
5  *
6  * Base64 encoding
7  *
8  */
9 
10 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11 
12 #include <stdint.h>
13 #include <string.h>
14 
15 /**
16  * Calculate length of base64-encoded data
17  *
18  * @v raw_len		Raw data length
19  * @ret encoded_len	Encoded string length (excluding NUL)
20  */
base64_encoded_len(size_t raw_len)21 static inline size_t base64_encoded_len ( size_t raw_len ) {
22 	return ( ( ( raw_len + 3 - 1 ) / 3 ) * 4 );
23 }
24 
25 /**
26  * Calculate maximum length of base64-decoded string
27  *
28  * @v encoded		Encoded string
29  * @v max_raw_len	Maximum length of raw data
30  *
31  * Note that the exact length of the raw data cannot be known until
32  * the string is decoded.
33  */
base64_decoded_max_len(const char * encoded)34 static inline size_t base64_decoded_max_len ( const char *encoded ) {
35 	return ( ( ( strlen ( encoded ) + 4 - 1 ) / 4 ) * 3 );
36 }
37 
38 extern size_t base64_encode ( const void *raw, size_t raw_len, char *data,
39 			      size_t len );
40 extern int base64_decode ( const char *encoded, void *data, size_t len );
41 
42 #endif /* _IPXE_BASE64_H */
43