Add documentation for Contrac and Dtk classes.
[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 uint32_t epoch_to_day_number(time_t epoch) {
70 uint32_t day_number;
71
72 // DayNumber <- (Number of Seconds since Epoch) / (60 * 60 * 24)
73 day_number = epoch / (60 * 60 * 24);
74
75 return day_number;
76 }
77
78 uint8_t epoch_to_time_interval_number(time_t epoch) {
79 uint8_t time_interval_number;
80 uint32_t day_number;
81 uint32_t seconds;
82
83 // TimeNumberInterval <- (Seconds Since Start of DayNumber) / (60 * 10)
84 day_number = epoch_to_day_number(epoch);
85 seconds = epoch - (day_number * (60 * 60 * 24));
86
87 time_interval_number = seconds / (60 * 10);
88
89 // Falls in interval [0,143]
90 if (time_interval_number > 143) {
91 time_interval_number = 143;
92 }
93
94 return time_interval_number;
95 }
96
97