+bool contrac_update_current_time(Contrac * data) {
+ bool result;
+ time_t epoch;
+ uint32_t dn_stored;
+ uint32_t dn_now;
+ uint8_t tn_stored;
+ uint8_t tn_now;
+
+ result = true;
+
+ if ((data->status & STATUS_TK) == 0) {
+ // No Tracing Key has been set, so generate a random key
+ result = contrac_generate_tracing_key(data);
+ }
+
+ epoch = time(NULL);
+
+ if (result) {
+ dn_now = epoch_to_day_number(epoch);
+ dn_stored = dtk_get_day_number(data->dtk);
+
+ // Only set again if uninitialised or the time has changed
+ if ((dn_now != dn_stored) || ((data->status & STATUS_DTK) == 0)) {
+ result = contrac_set_day_number(data, dn_now);
+ }
+ }