1#include <openssl/evp.h>
15 return static_cast<int>(4*((input_len+2)/3) + 1);
22 return static_cast<int>(3*input_len/4 + 1);
27unsigned char *
base64(
const unsigned char *binary,
size_t binary_len,
unsigned char *b64buf,
size_t b64buf_length)
30 if (!b64buf || b64buf_length < pl || b64buf_length >= std::numeric_limits<int>::max())
32 const int ol = EVP_EncodeBlock(b64buf, binary, binary_len);
33 if (ol !=
static_cast<int>(pl-1)) {
34 std::cerr <<
"Insufficient space to b64 encode" << std::endl;
42unsigned char *
decode64(
const unsigned char *b64buf,
size_t b64buf_length,
unsigned char *binary,
size_t binary_len)
45 if (!binary || binary_len < pl || binary_len > std::numeric_limits<int>::max())
47 const int ol = EVP_DecodeBlock(binary, b64buf, b64buf_length);
48 if (
static_cast<int>(pl-1) != ol) {
49 std::cerr <<
"Insufficient space to b64 decode;" << std::endl;
unsigned char * decode64(const unsigned char *b64buf, size_t b64buf_length, unsigned char *binary, size_t binary_len)
size_t binary_length(size_t input_len)
unsigned char * base64(const unsigned char *binary, size_t binary_len, unsigned char *b64buf, size_t b64buf_length)
size_t b64_length(size_t input_len)