/* * Base64 Encoding and Decoding * (C) 2010 Jack Lloyd * * Botan is released under the Simplified BSD License (see license.txt) */ #ifndef BOTAN_BASE64_CODEC_H__ #define BOTAN_BASE64_CODEC_H__ #include #include namespace Botan { /** * Perform base64 encoding * @param output an array of at least input_length*4/3 bytes * @param input is some binary data * @param input_length length of input in bytes * @param input_consumed is an output parameter which says how many * bytes of input were actually consumed. If less than * input_length, then the range input[consumed:length] * should be passed in later along with more input. * @param final_inputs true iff this is the last input, in which case padding chars will be applied if needed * @return number of bytes written to output */ size_t BOTAN_DLL base64_encode(char output[], const uint8_t input[], size_t input_length, size_t& input_consumed, bool final_inputs); /** * Perform base64 encoding * @param input some input * @param input_length length of input in bytes * @return base64adecimal representation of input */ std::string BOTAN_DLL base64_encode(const uint8_t input[], size_t input_length); /** * Perform base64 encoding * @param input some input * @return base64adecimal representation of input */ template std::string base64_encode(const std::vector& input) { return base64_encode(input.data(), input.size()); } /** * Perform base64 decoding * @param output an array of at least input_length*3/4 bytes * @param input some base64 input * @param input_length length of input in bytes * @param input_consumed is an output parameter which says how many * bytes of input were actually consumed. If less than * input_length, then the range input[consumed:length] * should be passed in later along with more input. * @param final_inputs true iff this is the last input, in which case padding is allowed * @param ignore_ws ignore whitespace on input; if false, throw an exception if whitespace is encountered * @return number of bytes written to output */ size_t BOTAN_DLL base64_decode(uint8_t output[], const char input[], size_t input_length, size_t& input_consumed, bool final_inputs, bool ignore_ws = true); /** * Perform base64 decoding * @param output an array of at least input_length*3/4 bytes * @param input some base64 input * @param input_length length of input in bytes * @param ignore_ws ignore whitespace on input; if false, throw an exception if whitespace is encountered * @return number of bytes written to output */ size_t BOTAN_DLL base64_decode(uint8_t output[], const char input[], size_t input_length, bool ignore_ws = true); /** * Perform base64 decoding * @param output an array of at least input_length/3*4 bytes * @param input some base64 input * @param ignore_ws ignore whitespace on input; if false, throw an exception if whitespace is encountered * @return number of bytes written to output */ size_t BOTAN_DLL base64_decode(uint8_t output[], const std::string& input, bool ignore_ws = true); /** * Perform base64 decoding * @param input some base64 input * @param input_length the length of input in bytes * @param ignore_ws ignore whitespace on input; if false, throw an exception if whitespace is encountered * @return decoded base64 output */ secure_vector BOTAN_DLL base64_decode(const char input[], size_t input_length, bool ignore_ws = true); /** * Perform base64 decoding * @param input some base64 input * @param ignore_ws ignore whitespace on input; if false, throw an exception if whitespace is encountered * @return decoded base64 output */ secure_vector BOTAN_DLL base64_decode(const std::string& input, bool ignore_ws = true); } #endif