3 * @author David Llewellyn-Jones
11 * @section DESCRIPTION
19 #include <openssl/evp.h>
25 // Function prototypes
27 // Function definitions
29 // Function definitions
31 size_t base64_encode_size(size_t binary_input
) {
32 return (((size_t)((binary_input
+ 2) / 3)) * 4) + 1;
35 size_t base64_decode_size(size_t base64_input
) {
36 return (((size_t)((base64_input
+ 3) / 4)) * 3) + 1;
39 void base64_encode_binary_to_base64(unsigned char const *input
, size_t input_size
, unsigned char *output
, size_t *output_size
) {
44 size_out
= base64_encode_size(input_size
);
46 if (size_out
> *output_size
) {
47 size_in
= base64_decode_size(*output_size
- 1) - 1;
49 *output_size
= base64_encode_size(size_in
);
51 EVP_EncodeBlock(output
, input
, size_in
);
54 void base64_decode_base64_to_binary(unsigned char const *input
, size_t input_size
, unsigned char *output
, size_t *output_size
) {
59 size_out
= base64_decode_size(input_size
);
61 if (size_out
> *output_size
) {
62 size_in
= base64_encode_size(*output_size
- 1) - 1;
64 *output_size
= base64_decode_size(size_in
);
66 EVP_DecodeBlock(output
, input
, size_in
);