1 /** 2 * \file base64.h 3 * 4 * \brief RFC 1521 base64 encoding/decoding 5 */ 6 /* 7 * Copyright The Mbed TLS Contributors 8 * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 9 */ 10 #ifndef MBEDTLS_BASE64_H 11 #define MBEDTLS_BASE64_H 12 13 #include "mbedtls/build_info.h" 14 15 #include <stddef.h> 16 17 /** Output buffer too small. */ 18 #define MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL -0x002A 19 /** Invalid character in input. */ 20 #define MBEDTLS_ERR_BASE64_INVALID_CHARACTER -0x002C 21 22 #ifdef __cplusplus 23 extern "C" { 24 #endif 25 26 /** 27 * \brief Encode a buffer into base64 format 28 * 29 * \param dst destination buffer 30 * \param dlen size of the destination buffer 31 * \param olen number of bytes written 32 * \param src source buffer 33 * \param slen amount of data to be encoded 34 * 35 * \return 0 if successful, or MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL. 36 * *olen is always updated to reflect the amount 37 * of data that has (or would have) been written. 38 * If that length cannot be represented, then no data is 39 * written to the buffer and *olen is set to the maximum 40 * length representable as a size_t. 41 * 42 * \note Call this function with dlen = 0 to obtain the 43 * required buffer size in *olen 44 */ 45 int mbedtls_base64_encode(unsigned char *dst, size_t dlen, size_t *olen, 46 const unsigned char *src, size_t slen); 47 48 /** 49 * \brief Decode a base64-formatted buffer 50 * 51 * \param dst destination buffer (can be NULL for checking size) 52 * \param dlen size of the destination buffer 53 * \param olen number of bytes written 54 * \param src source buffer 55 * \param slen amount of data to be decoded 56 * 57 * \return 0 if successful, MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL, or 58 * MBEDTLS_ERR_BASE64_INVALID_CHARACTER if the input data is 59 * not correct. *olen is always updated to reflect the amount 60 * of data that has (or would have) been written. 61 * 62 * \note Call this function with *dst = NULL or dlen = 0 to obtain 63 * the required buffer size in *olen 64 */ 65 int mbedtls_base64_decode(unsigned char *dst, size_t dlen, size_t *olen, 66 const unsigned char *src, size_t slen); 67 68 #if defined(MBEDTLS_SELF_TEST) 69 /** 70 * \brief Checkup routine 71 * 72 * \return 0 if successful, or 1 if the test failed 73 */ 74 int mbedtls_base64_self_test(int verbose); 75 76 #endif /* MBEDTLS_SELF_TEST */ 77 78 #ifdef __cplusplus 79 } 80 #endif 81 82 #endif /* base64.h */ 83