Add initial crypto functionality
[libcontrac.git] / src / utils.c
1 /** \ingroup contrac
2 * @file
3 * @author David Llewellyn-Jones
4 * @version $(VERSION)
5 *
6 * @section LICENSE
7 *
8 *
9 *
10 * @brief
11 * @section DESCRIPTION
12 *
13 *
14 *
15 */
16
17 // Includes
18
19 #include <openssl/evp.h>
20
21 // Defines
22
23 // Structures
24
25 // Function prototypes
26
27 // Function definitions
28
29 // Function definitions
30
31 size_t base64_encode_size(size_t binary_input) {
32 return (((size_t)((binary_input + 2) / 3)) * 4) + 1;
33 }
34
35 size_t base64_decode_size(size_t base64_input) {
36 return (((size_t)((base64_input + 3) / 4)) * 3) + 1;
37 }
38
39 void base64_encode_binary_to_base64(unsigned char const *input, size_t input_size, unsigned char *output, size_t *output_size) {
40 size_t size_in;
41 size_t size_out;
42
43 size_in = input_size;
44 size_out = base64_encode_size(input_size);
45
46 if (size_out > *output_size) {
47 size_in = base64_decode_size(*output_size - 1) - 1;
48 }
49 *output_size = base64_encode_size(size_in);
50
51 EVP_EncodeBlock(output, input, size_in);
52 }
53
54 void base64_decode_base64_to_binary(unsigned char const *input, size_t input_size, unsigned char *output, size_t *output_size) {
55 size_t size_in;
56 size_t size_out;
57
58 size_in = input_size;
59 size_out = base64_decode_size(input_size);
60
61 if (size_out > *output_size) {
62 size_in = base64_encode_size(*output_size - 1) - 1;
63 }
64 *output_size = base64_decode_size(size_in);
65
66 EVP_DecodeBlock(output, input, size_in);
67 }
68
69